这是一个玩具的例子。所以,基本上我创建了一个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]);
}
}
答案 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_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
实例可以正常工作。