有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对象数组中的java访问变量

我正在创建一个类来对一些数据进行排序

class data{
            public String text;
            public String day;
            public String direction;
        }

dados vetor[]={};

现在我必须改变一个变量,我是这样做的:

vetor[0].text="dumb text";

但我发现了这个错误:

尝试写入java字段。空对象引用上的lang.字符串


共 (3) 个答案

  1. # 1 楼答案

    你可能做过这样的事情:

    vetor[0] = someInstanceOfData.text; // Store value in array
    

    但是现在vetor[0]包含text字段的值(即a String)。 以后不能通过执行vetor[0]来访问text字段。这是指存储在该数组中的String。因此,如果以后text字段的值发生变化,向量仍将包含旧的

    因此vetor[0].text="dumb text";没有为data类的某个实例赋值text字段,而是试图为vetor[0]产生的字符串赋值

    编辑:如果要更改text字段的值:

    Data test = new Data(); // Make an instance of the Data class
    test.text = "A String"; // Assign a value
    

    如果你想制作一个数组(字符串?或数据对象?)

    Data[] arr = {new Data(), new Data(), new Data()}; // Using the litteral
    String[] arrOfStrings = {test.text, test.day, test.direction};
    

    如果您想从arr中的数据对象存储访问/分配,例如text

    arr[0].text = "Another String";
    arrOfStrings[0].text = ...; // Not possible because it is storing strings not Data objects!
    

    如果你不知道前面的长度,你就不能使用数组(因为它们是固定长度的)。相反,您可以使用长度可变的List

    List<Integer> test = new ArrayList<Integer>();  
    test.add(1); // Add elements
    test.size(); // How long is my array at the moment?
    test.get(0); // Access first element (index 0)  > 1
    

    将此应用于代码:

    dados testObject = new dados(); // create a  "dados" object
    List<dados> testList = new ArrayList<dados>();
    testList.add(testObject);
    testList.get(0); // Get object on index 0 (hence the first), hence "testObject"
    

    要对dados个对象中的ArrayList进行排序,您应该实现一个自定义比较器,以便按照您的需要对对象进行排序

    public class OwnComparator implements Comparator<Dados> {
        @Override
        public int compare(Dados obj1, Dados obj2) {
            return obj1.text.compareTo(obj2.text); // Sort based on "text" field
        }
    }
    

    实际排序

    Collections.sort(testList, new OwnComparator());
    
  2. # 2 楼答案

    我假设你的班名是“护墙板”,而不是“数据”。 您的数组没有任何元素,因此会出现错误。 将数组初始化为一定数量的元素,然后指定text属性

        dados[] vetor  = new dados[10];
        vetor[0] = new dados();
        vetor [0].text = "xx";
    
        dados[] vetor2 = {new dados(), new dados()};  // initialize to 2 elements
        vetor2[0].text = "xx";
    
  3. # 3 楼答案

    除非您将数组重新分配给其他对象,否则这就是您的问题

    dados vetor[]={};
    

    您创建了一个空数组-vetor[0]中没有数据对象可供您设置其文本。如果在声明数组时知道元素的数量,可以使用以下方法创建一个数组来保存所有元素

    dados[] vetor  = new dados[10]; 
    

    要在该数组中实际创建元素并设置其文本,需要创建一个新对象

    vetor[0] = new data();
    vetor[0].text = "Some text";
    

    或者,在将数据对象添加到数组之前,为其创建并设置值:

    data myData = new data();
    myData.text = "Some text";
    vetor[0] = myData;