我正在创建一个类来对某些数据进行排序。
class data{
public String text;
public String day;
public String direction;
}
dados vetor[]={};
现在我必须改变一个变量,我这样做:
vetor[0].text="dumb text";
但是我得到了这个错误:
尝试在空对象引用
上写入字段java.lang.String答案 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"
要对ArrayList
个dados
个对象进行排序,您应该实现一个自定义比较器来按需要对对象进行排序
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";