有人可以解释为什么它不起作用吗?错误发生在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
}
}
答案 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");
希望这有帮助...