Java 在知道构造函数的参数之前,如何初始化类对象?
在我的作业中,我应该创建一个程序,该程序使用一个switch case来访问来自不同类的方法来执行某些操作。第一种情况接收用户输入,该输入在另一个类的构造函数中使用。但是,如果在第一种情况下初始化class对象,则会从其他情况中得到错误,因为该对象可能尚未初始化。如何为包含我的方法的类创建该对象,并且仍然将在switch case中提示的用户输入获取到构造函数中Java 在知道构造函数的参数之前,如何初始化类对象?,java,Java,在我的作业中,我应该创建一个程序,该程序使用一个switch case来访问来自不同类的方法来执行某些操作。第一种情况接收用户输入,该输入在另一个类的构造函数中使用。但是,如果在第一种情况下初始化class对象,则会从其他情况中得到错误,因为该对象可能尚未初始化。如何为包含我的方法的类创建该对象,并且仍然将在switch case中提示的用户输入获取到构造函数中 public class NumberList{ int length; int offset; public Numb
public class NumberList{
int length; int offset;
public NumberList(int length, int offset){ //constructor
this.length = length; this.offset = offset;
}
public void shift(int a){ //shift method
temp = numbers[0];
for (int i = 0; i < length-1; i++) {
numbers[i] = numbers[i+1];
}
numbers[length - 1] = temp;
}
因此,如果我在switch情况下创建NumberList对象,我会得到错误“variable not have initialized”,但它必须在那里,这样我才能为构造函数添加用户输入。在切换情况下,如何在仍然能够为构造函数添加信息的情况下初始化对象?问题在于,在情况2中使用的是numasbrah,但在情况1中创建它 你什么都没有,尽管这迫使你在进入案例2之前先经历案例1 如果有人选择2而没有选择1,那么程序将失败
有很多方法可以解决这个问题,包括在switch语句之外创建一个“default”numasbrah。不过,最简单的方法可能是完全删除案例2,并从案例1中运行它。问题在于,您在案例2中使用numasbrah,但在案例1中创建它 你什么都没有,尽管这迫使你在进入案例2之前先经历案例1 如果有人选择2而没有选择1,那么程序将失败
有很多方法可以解决这个问题,包括在switch语句之外创建一个“default”numasbrah。不过,最简单的方法可能是完全删除案例2,并从案例1中运行它。问题是您正在案例1范围内实例化一个类,该范围外的任何对象都无法访问该对象。有关作用域的更多信息 但对于您的直接问题,如果您希望在案例1中创建的对象在案例2中可以访问,只需在案例外部但在开关内部创建(使用默认值创建): 注意
这里的逻辑似乎是错误的。如果用户选择案例2,会有默认的numbasbrah吗 问题是,如果您在case1范围内实例化一个类,那么该范围外的任何对象都无权访问该对象。有关作用域的更多信息 但对于您的直接问题,如果您希望在案例1中创建的对象在案例2中可以访问,只需在案例外部但在开关内部创建(使用默认值创建): 注意
这里的逻辑似乎是错误的。如果用户选择案例2,会有默认的numbasbrah吗 不创建对象就不能使用它,这就是您需要知道的全部!因此,要么在开关案例中声明,而不是在第一个案例中声明,并且必须确保用户在案例二之前选择案例一,要么可以添加一个新的布尔变量,告知对象是否已创建,并在使用该对象的案例中使用它,以确保它已创建!那是我应该做的
或者使用
如果(numbasbrah!=null)
如Eduardo所说不创建对象就不能使用它,这就是您需要知道的全部!因此,要么在开关案例中声明,而不是在第一个案例中声明,并且必须确保用户在案例二之前选择案例一,要么可以添加一个新的布尔变量,告知对象是否已创建,并在使用该对象的案例中使用它,以确保它已创建!那是我应该做的
或者使用
if(numbasbrah!=null)
就像Eduardo说的那样我认为这里不需要开关格,因为case 1
在这里总是必需的。例如,如果您将对象定义为null(如@Eduardo Dennis answer)然后您选择case2
它将给您一个空指针,另一方面,如果您选择case1
您已经在初始化对象,那么在这两种情况下您都需要对象初始化,为什么不删除case1
并在开关
之外定义它,或者最好是删除开关并使用如果else
我认为这里不需要开关大小写,因为这里始终需要大小写1
。例如,如果您将对象定义为null(如@Eduardo Dennis answer)然后您选择case2
它将给您一个空指针,另一方面,如果您选择case1
您已经在初始化对象,那么在这两种情况下您都需要对象初始化,为什么不删除case1
并在开关
之外定义它,或者最好是删除开关并使用如果否则
这就是全部代码吗?在没有任何数字声明的情况下,NumberList如何编译[]?不,我试图压缩。。。它可能是代码总数的1/8,实际的NumberList总共有6个方法,所以如果用户选择案例2,应该移动什么?会有默认值吗?这些都是代码吗?在没有任何数字声明的情况下,NumberList如何编译[]?不,我试图压缩。。。它可能是代码总数的1/8,实际的NumberList总共有6个方法,所以如果用户选择案例2,应该移动什么?是否会有默认值?这将编译,但如果他们首先选择案例2,仍然会抛出空指针异常。至少您应该对将编译的numbasbrah进行null检查,但如果它们首先选择case2,则仍然会抛出null指针异常。至少你应该检查空值,我有这样做的指示!这就是我为什么这么做的原因confused@TylerWeber启动时,您应该让用户立即插入值作为
public class assignment7{
public static void main(String[] args){
int choice;
do{
System.out.println("input choice");
choice = scan.nextInt();
switch(choice){
case '1':
System.out.println("input the array size.");
size = scan.nextInt();
System.out.println("input the array offset.");
offset = scan.nextInt();
NumberList numbasbrah = new NumberList(size, offset);
numbasbrah.printInfo();
break;
case '2':
numbasbrah.shift();
numbasbrah.printInfo();
break;
case '3': //quit
break;
}while(choice!=3);
}} //end main method
switch(choice){
NumberList numbasbrah =new NumberList(defaultValue, defaultVale);
case '1':
System.out.println("input the array size.");
size = scan.nextInt();
System.out.println("input the array offset.");
offset = scan.nextInt();
numbasbrah = new NumberList(size, offset);
numbasbrah.printInfo();
break;
case '2':
numbasbrah.shift();
numbasbrah.printInfo();
break;
case '3': //quit
break;
}