Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建具有多个数据类型的Java数组时出错_Java_Arrays_Class_Oop_Object - Fatal编程技术网

创建具有多个数据类型的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,但这有点重要,因为即使是伪构造函数也没有意义