第二个扫描程序忽略输入

时间:2017-03-21 18:37:35

标签: java java.util.scanner

我编写了包含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;
}

}

3 个答案:

答案 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()" />`