我正在为我的一个类的实验室工作,因此我正在寻找更多的解释,而不是实际的代码。Java扫描仪在另一种方法
对于这项任务的一部分,我需要读取用户的数字,直到按下control-d。我有一个方法,一个while循环,我通过扫描仪进入方法为好,这是我的主要方法:
Scanner scan = new Scanner(System.in);
System.out.println("Length:");
int length = 0;
if(scan.hasNextInt()){
length = scan.nextInt();
}
if(length<0 || length>100){
System.out.println("Length is not of the proper size");
scan.close();
return;
}
Double[] a1 = new Double[length];
Double[] a2 = new Double[length];
fillWithZeros(a1);
fillWithZeros(a2);
System.out.println("Enter the numbers to be multiplied:");
a1 = fillWithValues(a1,scan);
a2 = fillWithValues(a2,scan);
double total = calculateTotal(a1,a2);
printVector(a1,"a1");
printVector(a2,"a2");
System.out.println("Total: " + total);
scan.close();
那么这里就是我的fillWithValues方法:
public static Double[] fillWithValues(Double[] array, Scanner scan) {
int numberOfElements = 0;
while(scan.hasNextDouble()){
if(numberOfElements<array.length){
array[numberOfElements] = scan.nextDouble();
numberOfElements++;
}else{
return array;
}
}
return array;
}
的问题,我我有,当我按下Control-D它不会像它应该结束输入流,但我有上面的代码在主要它会结束输入流,所以有人可以解释为什么我有这个问题?
我只是将扫描仪声明为全局变量,但我不允许在此任务中使用全局变量。
如果您在其他代码变体的主要方法中也有独立方法中的**精确**代码,则其行为应该相同。请发布两种变体的完整代码,工作人员和非工作人员(另请参见[mcve])。 –
我编辑过它显示我的代码为主,然后是不工作的方法。如果我将fillWithValues方法中的代码放在main中,并将数组名称更改为a1或a2而不是数组,则它工作得很好 –
因此,您正在用**替换** two **'fillWithValues()'调用**来自该方法的一个**代码块? –