[英]Acessing variable in object array
我正在创建一个类来对一些数据进行排序。
class data{
public String text;
public String day;
public String direction;
}
dados vetor[]={};
现在我必须改变一个变量,我是这样做的:
vetor[0].text="dumb text";
但我收到此错误:
尝试在空对象引用上写入字段 java.lang.String
除非您将数组重新分配给其他东西,否则这是您的问题。
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;
你可能做了类似的事情:
vetor[0] = someInstanceOfData.text; // Store value in array
但是现在vetor[0]
包含text
字段的值(即String
)。 您以后无法通过执行vetor[0]
访问text
字段。 这是指存储在该数组中的String
。 因此,如果稍后text
字段的值发生变化,向量仍将包含旧的。
因此vetor[0].text="dumb text";
不是分配data
类的某个实例的text
字段,而是尝试为由vetor[0]
产生的 String 分配一个新值。
编辑:如果要更改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());
我假设您的班级名称是“dados”而不是“data”。 您的数组没有任何元素,因此出现错误。 将数组初始化为一定数量的元素,然后分配 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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.