扫描仪无法停止读取输入

时间:2012-06-17 08:32:47

标签: java

为了使我的程序更加简化(没有尝试并且无处不在),我尝试创建一个单独的方法来获取数据。我有一个双打和弦乐。 出于某种原因,当我尝试使用此方法时,它完全被忽略,并像注释一样传递。有什么我做错了吗?

public int inputint(){
     Scanner sc = new Scanner (System.in);
     int variable = 0;
     boolean valid = true;
     do{
        try{
           if (variable >= 0 && valid){
           }
           else if(valid){
              System.out.print("Please enter positive values only: ");
           }

           valid = true;
        }
           catch (InputMismatchException e){
              System.out.print("Please enter numerical values only: ");
              sc = new Scanner(System.in);
              valid = false;
           }
     }while (!valid || variable < 0);
     return variable;
  }

2 个答案:

答案 0 :(得分:2)

首先,你的代码非常难以理解。 (或者我可能只是我)

但如果你看一下你的代码

Scanner sc = new Scanner (System.in);
     int variable = 0;
     boolean valid = true;

您正在创建Scanner对象,但该方法中没有任何地方您实际使用它。

接下来的几行,

if (variable >= 0 && valid){
       }

满足这两个条件。因此括号中没有任何内容,不会执行任何代码。所以从那里,它只返回变量的值,即0。

因此,您需要实际使用Scanner类来获取整数。我相信,虽然我不确定,但方法是

Scanner.nextInt();

编辑:来自JavaDocs http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

您只需使用

即可
Scanner sc = new Scanner(System.in);
 int i = sc.nextInt();

从扫描仪中读取整数。

答案 1 :(得分:0)

您的变量variable已分配0valid变量已分配true。因此,while (!valid || variable < 0)表达式将始终计算为false,并且执行循环将仅执行一次(不会创建扫描程序)。

我想你想在检查变量variable之前阅读用户输入,所以你可能想要在进行if (variable >= 0 && valid)检查之前创建扫描器并阅读输入。

旁注,您可以跳过valid变量并使用variable = sc.nextInt() ;,与@ Austin的答案进行比较。