创建具有多个数据类型的Java数组时出错
有人能解释一下为什么它不起作用吗?误差为创建具有多个数据类型的Java数组时出错,java,arrays,class,oop,object,Java,Arrays,Class,Oop,Object,有人能解释一下为什么它不起作用吗?误差为obj[0][0]=1。它说GPA不能转换为int,这与String变量赋值s是一样的 公共类GPA{ 公共字符串s; 公共int n; 公共GPA[]a; //建造师 公共GPA(GPA[][]a){} 公共静态void main(字符串[]args){ GPA[][]obj=新GPA[2][2]; obj[0][0]=1;//此处有错误 } } obj是一个GPA对象数组。 obj[0]=1表示将该数组的第一个元素分配给int值。它应该是GPA类型的对
obj[0][0]=1代码>。它说GPA不能转换为int,这与String
变量赋值s
是一样的
公共类GPA{
公共字符串s;
公共int n;
公共GPA[]a;
//建造师
公共GPA(GPA[][]a){}
公共静态void main(字符串[]args){
GPA[][]obj=新GPA[2][2];
obj[0][0]=1;//此处有错误
}
}
obj
是一个GPA对象数组。
obj[0]=1
表示将该数组的第一个元素分配给int
值。它应该是GPA类型的对象
。
你可以这样做
obj[0]=新的GPA(“约翰·多伊”,6);
我还建议使用Java约定,将变量设置为private和set()
通过公共方法(如setter()
s)将它们设置为private和set()
问题被更改,这使得答案变得无关紧要。您实际做的是尝试将int和/或string赋值给期望GPA类对象的变量。
难道你不想这么做吗
obj[0].n=1;
obj[0].s="text;"
它将不起作用,并且会给您带来编译时错误,因为GPA是类类型,并且您正在尝试为其分配int值
你有两个选择
选项1:
GPA[] obj = new GPA[4];
obj[0] = new GPA();
obj[0].n = 1;
选项2:
GPA[] obj = new GPA[4];
obj[0] = new GPA();
obj[0].n = 1;
您可以将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);
将您的成员公开是不好的编程实践。建议始终使用设置器 对于对象数组,始终必须首先在该位置的对象上创建。否则,您总是会得到一个NullPointerException
。
所以你需要这样的东西
GPA[][] obj = new GPA[2][2];
obj[0][0] = new GPA();
obj[0][0].s="text";
obj[0][0].n=1;
...
依此类推。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)
现在,将相同的规则应用于公共GPA[]a代码>这里是一个GPA类型的数组。所以它只接受GPA类型的对象
也就是说,您可以存储如下所示的值
a[0]=新的GPA(“此处命名”,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");
希望这有助于…是的,错误是正确的。在java中,数组中不能有多种数据类型。如果将数组声明为GPA对象数组,则它只能包含GPA对象。如果将数组声明为int数组,则它必须只包含int。@SureshAtta我该怎么做?@KylonTyner我确实创建了obj作为GPA对象。@Maya是的,你创建了。然而,当您调用“obj[0]=1”时,您试图在GPA数组中存储一个int;相反,您需要执行类似于“obj[0]=new GPA(string,int);”的操作,其中string和int是填充值。这不会在您的第一行给出一个NullPointerException
。如果您将它与提供的源代码联系起来,npe将是最小的问题,我的意思是,更多的是一种将值正确分配给它们指定的变量的方法。在这两种情况下,这不会在您的第一行上给出一个NullPointerException吗?我建议使用lombok@Data,但这有点重要,因为即使是伪构造函数也没有意义