在对象数组中访问变量

时间:2015-09-09 17:02:51

标签: java class

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

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

dados vetor[]={};

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

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

但是我得到了这个错误:

尝试在空对象引用

上写入字段java.lang.String

2 个答案:

答案 0 :(得分:0)

你可能做过类似的事情:

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

但是现在vetor[0]包含text字段的(即String)。 您稍后无法通过text访问vetor[0]字段。这是指存储在该数组中的String。因此,如果稍后text字段的值发生更改,则向量仍将包含旧值。

因此,vetor[0].text="dumb text";未分配text类的某个实例的data字段,而是尝试为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};

如果您想访问/分配例如来自text

中的数据对象的arr
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"

要对ArrayListdados个对象进行排序,您应该实现一个自定义比较器来按需要对对象进行排序

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());

答案 1 :(得分:0)

我假设你的班级名字是&#34; dados&#34;而不是&#34;数据&#34;。 您的数组没有任何元素,因此出错。 将数组初始化为一定数量的元素,然后分配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";