创建具有多个数据类型的java数组时出错

8gsdolmq  于 2021-07-09  发布在  Java
关注(0)|答案(5)|浏览(331)

有人能解释一下为什么不行吗?错误位于 obj[0][0]=1; . 它说gpa不能被转换成int,对于 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
        }
}
ohtdti5x

ohtdti5x1#

obj 是gpa对象的数组。 obj[0] = 1 意味着您要将该数组的第一个元素指定给 int 价值观。它应该是一个 object gpa类型。你可以这样做

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

我还建议使用java约定,通过 variables 私人和 set() 通过公开的方式,比如 setter() s。
问题变了,答案就变得无关紧要了。

6qqygrtg

6qqygrtg2#

它将不起作用,并给你编译时错误,因为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。

hmmo2u0o

hmmo2u0o3#

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

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

每个职位都是如此。

kzmpq1sx

kzmpq1sx4#

实际上,您所做的是尝试将int和/或string赋给需要gpa类的对象的变量。你不想做吗

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

w8biq8rn5#

java数组是同质的(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,一次一个(我必须制作一个学生姓名与平均成绩表),我该怎么做?
这个需求的一个解决方案是,使用构造函数或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");

希望这有助于。。。

相关问题