繁体   English   中英

访问对象数组中的变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM