2014-12-07 97 views
1

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

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]); 
      } 
} 
+0

你可以用'input_array.input_array [i]'来访问'ArrayClass'中的数组。第一个'input_array'是你的'ArrayClass'的实例,第二个'.input_array'是该类中同名的实际数组。 – GameDroids 2014-12-07 14:07:13

+0

FYI:'len'没有被定义,在for循环中你也应该使用相同的'len'变量而不是一个常量值。其次,我认为在你返回'input_array [index]'元素的'ArrayClass'中增加一个'get(int index)'方法会更合适。这样你就可以像''''input_array.get(i)'''''main'方法访问它 – GameDroids 2014-12-07 14:09:54

回答

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_array是你ArrayClass对象的实例和第二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实例会工作。

4

您正试图与[]检索数组元素,但ArrayClass不是数组。你要么需要公开input_array,或定义get方法来检索它的内容,例如:

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