创建具有多种数据类型的Java数组时出错

时间:2017-07-14 13:15:17

标签: java arrays class oop object

有人可以解释为什么它不起作用吗?错误发生在obj[0][0]=1;。它表示GPA无法转换为整数,String变量赋值s也是如此。

public class GPA {        
        public String s;
        public int n;
        public GPA[][] a;

        //constructor
        public GPA(GPA[][] a){}    

        public static void main(String[] args) {
            GPA[][] obj=new GPA[2][2];
            obj[0][0]=1; //error here
        }
}

5 个答案:

答案 0 :(得分:4)

obj是一个GPA对象数组。 obj[0] = 1表示您将该数组的第一个元素分配给int值。它应该是GPA类型的object。 你可以像

那样做
obj[0] = new GPA("John Doe", 6);

我还建议使用Java约定,将variables设为私有,set()使用setter()等公共方法。

问题已更改,这使答案无关紧要。

答案 1 :(得分:1)

您实际上正在尝试将int和/或字符串分配给期望GPA类对象的变量。 你不想做

obj[0].n=1;
obj[0].s="text;"

答案 2 :(得分:1)

它不会工作并且给你编译时错误,因为GPA是类类型,你正在尝试为它分配int值。

您有两种选择。

选项1:

GPA[] obj = new GPA[4];
obj[0] = new GPA();
obj[0].n = 1;

选项2:

您可以将GPA的成员设为私有,并使用setter来设置值。以下是示例。

public class GPA {

    private String s;
    private int n;
    private GPA[] a;

    public GPA() {}

    public GPA(GPA[] a) {}

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public GPA[] getA() {
        return a;
    }

    public void setA(GPA[] a) {
        this.a = a;
    }

}

然后使用setter设置。

obj[0].setN(1);

让您的会员公开是不好的编程习惯。始终建议使用setter。

答案 3 :(得分:1)

对于对象数组,您必须首先在该位置的对象上创建。否则你总是得到NullPointerException。 所以你需要的是这样的东西

 GPA[][] obj = new GPA[2][2];
obj[0][0] = new GPA();
obj[0][0].s="text";
obj[0][0].n=1;
...

以及每个职位的等等。

答案 4 :(得分:0)

Java Arrays是同构的(Javascript数组是异构的)。这意味着您只能存储创建数组时使用的元素类型。

ex: `int intArray[];` //We can store only int type elements(it also accepts Integer etc.. types but java converts to int then store it)

现在,将相同的规则应用于public GPA[] a;这里是一个GPA类型的数组。所以它只接受GPA类型的对象。

这意味着,您可以存储如下所示的值

a [0] =新GPA(" nameHere",6);

  

如果我想要存储一个字符串或一个int,一次一个(我有   制作学生姓名与GPA的表格,我该怎么做?

此要求的一个解决方案是,使用构造函数或setter方法分配变量。

GPA[] obj = new GPA[2];

obj[0] = new GPA("first", 6); // here you need to create a new constructor
or 
obj[1] = new GPA(); // Here default constructor will work and you need to have setter methods

obj[1].setName("second");

希望这有帮助...