Java:无法访问对象的元素

时间:2014-12-07 14:03:58

标签: java oop

这是一个玩具的例子。所以,基本上我创建了一个ArrayClass对象。我在另一个类中实例化它。但我无法访问其元素。我收到了这个错误:

error: array required, but ArrayClass found

我在这里做错了什么?

import java.util.*;
import java.io.*;
import java.math.*;

public class ArrayClass{
    protected int[] input_array;
    protected int nElems;

    // multiple constructor
    public ArrayClass(){
        // nothing here
    }

    public ArrayClass(int max){
        input_array = new int [max];
        nElems = 0;
    }

    public void insert(int value){
        input_array[nElems++] = value;
    }
}

class ArrayApp{
    public static void main(String[] args){      
            ArrayClass input_array = new ArrayClass(len);         
            for(int i = 0; i <= 10; i++){
                System.out.println(input_array[i]);
            }
}

2 个答案:

答案 0 :(得分:4)

您正在尝试使用[]检索数组元素,但ArrayClass不是数组。您需要公开input_array,或者定义一个get方法来检索其内容,例如:

public getValue(int index)
{
    return input_array[index];
}

答案 1 :(得分:2)

我在正确答案中的评论:

ArrayClass input_array = new ArrayClass(len);         
for(int i = 0; i <= 10; i++){
    System.out.println(input_array[i]);
}

这不起作用,因为此处input_array是您的类ArrayClass的实例(而不是数组)。只能像这样访问数组:array[i]。因此,如果您想从ArrayClass访问该阵列,您可以这样做:

ArrayClass input_array = new ArrayClass(len);         
for(int i = 0; i <= 10; i++){
    System.out.println(input_array.input_array[i]);
}

其中第一个input_arrayArrayClass对象的实例,第二个input_array是该类中的实际数组(它们具有相同的名称,所以它可能有点混乱)。一般来说,它将是myObject.array[i]

但是,当您定义这样的类时,最好不要允许访问类变量,但为此提供方法。所以你的课可能看起来像那样:

public class ArrayClass {

    private int[] input_array;  // private means that no access is allowed from outside the class
    private int nElems;


    public void insert(int value) {   // here you already provide a method to access the array from outside the class
        input_array[nElems++] = value;
    }

    public int get(int index){    // this would be the method to get the value from your array
       return input_array[index];
    }
}

现在您可以像这样访问数组(例如在循环中):

input_array.get(i);

建议提供这样的getter / setter方法,因为在这里你可以确保控制对数组的所有访问,并且不会发生任何“坏”。想象一下,你会在main方法中写出类似的内容:

input_array.input_array = new int[0]; 

然后,ArrayClass中的数组将消失,您无法再保证ArrayClass实例可以正常工作。