我编写了包含Scanners的Java代码。它应该做的是得到2个输入,然后做数学。问题是第二台扫描仪无法正常工作。它会在不要求输入的情况下自动执行else语句。
package stuff;
import java.util.Scanner;
public class Diagonal {
public static void main(String[] args) {
double a = Math.pow(getHeight(), 2);
System.out.println(a);
double b = Math.pow(getWidth(), 2);
double c = a + b;
System.out.println(Math.sqrt(c));
}
static double getWidth() {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the width.");
double width;
if(scan.hasNextDouble()) {
width = scan.nextDouble();
}
else {
System.out.println("Sorry, there was an error!");
width = 0;
}
scan.close();
return width;
}
static double getHeight() {
Scanner scan2 = new Scanner(System.in);
System.out.println("Enter the height");
double height;
if(scan2.hasNextDouble()) {
height = scan2.nextDouble();
}
else {
System.out.println("Sorry, there was an error!");
height = 0;
}
scan2.close();
return height;
}
}
答案 0 :(得分:1)
你不能这样做:
double a = Math.pow(getHeight(), 2);
System.out.println(a);
double b = Math.pow(getWidth(), 2);
因为getHeight()和getWidth()是关闭扫描程序的方法,它也关闭了System.in流......
所以你的2条件 scan.hasNextDouble()永远不会满足!
解决方案:
使用1个扫描仪实例,并在完成读取输入后将其关闭
答案 1 :(得分:0)
关闭标准输入流后,无法重新打开它。你的getHeight()方法将其关闭,因此你的getWidth()方法无法再次打开它。
为您的程序打开一次标准输入流,并且在读完所有用户输入之前不要关闭它。
答案 2 :(得分:0)
关闭后,您无法重新打开标准输入流。所以在我们的代码中从两个方法中删除Scanner对象并在'main'函数中初始化一次。像这样在两个函数中使用'scan'对象。
`<input type="text" angucomplete-alt id="ex2" ... (keyup)="localSearch()" />`