1

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

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;
  }
4

2 回答 2

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();

从扫描仪读取整数。

于 2012-06-17T08:41:28.437 回答
0

您的变量variable已分配0 ,valid变量已分配true。因此,while (!valid || variable < 0)表达式将始终被计算false 并且 do-while 循环将只执行一次(而不会创建 Scanner)。

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

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

于 2012-06-17T08:52:45.697 回答