有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

oop Java:无法访问对象的元素

这是一个玩具的例子。所以,基本上我创建了一个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) 个答案

  1. # 1 楼答案

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

    public getValue(int index)
    {
        return input_array[index];
    }
    
  2. # 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实例能够工作