【问题标题】:java Scanner force user to input a int valuejava Scanner强制用户输入一个int值
【发布时间】:2015-06-25 17:05:47
【问题描述】:
public class Main{
    public static void main(String args[]){
    int i = nextInt();
}
public int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    while (!scanner.hasNextInt()){
            scanner.nextLine();
        Printer.println(Printer.PLEASE_NUMBER);
    }
    i=scanner.nextInt();
    scanner.close();
    return i;
}
}

上面的代码是我试图强制用户输入一个 int 值的方式,但我得到了 nosuchelement 异常,因为scanner.nextLine() 读取的是NULL。 在 C++ 中,软件等待用户输入一些东西。有什么办法可以强制程序停止,等待用户输入内容然后进行检查?

编辑: 所以无论如何我都会遇到问题,如果我在 Main 类之外使用扫描仪,它会给出错误...

【问题讨论】:

  • 请发布完整程序!

标签: java loops input nosuchelementexception


【解决方案1】:

如果您希望用户输入并且扫描仪只拾取一个整数值 Scanner 提供的方法:

int i = scanner.nextInt();

i 将存储输入到控制台的下一个值。如果i 不是整数,它将抛出异常。

这是一个示例:假设我希望用户输入一个数字,然后我想将它吐回给用户。这是我的主要方法:

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     System.out.print("Please print your number: ");
     int i = sc.nextInt(); 
     System.out.println("Your Number is: " + i);
}

现在要检查 i 是否为整数,您可以使用 if 语句。但是,如果您希望程序重复直到用户输入一个整数,您可以使用 while 循环或 do while 循环,其中循环的参数将检查 i 是否为整数。

希望这就是您要找的东西!顺便说一句,避免将您的方法命名为 nextInt(),因为导入 java.util.Scanner; 已经具有该方法名称。不要忘记imports

【讨论】:

  • GOtcha 方法名称。如您所见,我已经在使用 while 循环,但我从scanner.nextLine() 读取了一个空值
  • 我是说你不需要你的方法。您可以将 Scanner 读取放在 main 中的 while 循环中,然后将所有循环一起循环。
  • 如果用户输入了一个无效的整数会怎样? (你得到一个例外。如何处理它?)
  • 好吧,我将如何做这件事是做一个 do while 循环,并让扫描仪在某个布尔值为真时连续获取输入。然后有一个 if 语句来检查用户是否输入了一个无效的整数,如果是,则不会做任何事情。否则,如果该值是一个可接受的整数,它会将您所说的布尔值设置为 false,从而跳出循环。
  • 事实上,我并没有与此密切合作,所以我不知道如何处理异常,但我很确定你可以检查是否它不是 int,这将防止异常...我当然不知道。
【解决方案2】:

你可以这样做:

public static void main(String[] args) {
    System.out.println("" + nextInt());
}

public static int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    System.out.println("Please enter a number:");
    while (!scanner.hasNextInt()){
        System.out.println("Please enter a number:");
        scanner.nextLine();
    }
    i = scanner.nextInt();
    scanner.close();
    return i;
}

这将导致程序在每次执行循环时停止并等待输入。它会一直循环,直到在scanner 中有一个int

【讨论】:

  • 线程“main”java.util.NoSuchElementException 中的异常:在 MAIN.Main.nextInt(Messenger.java:22) 的 java.util.Scanner.nextLine(Scanner.java:1585) 中找不到行)
  • @Vale 对我来说工作得很好,这意味着你还有其他事情要发生......Printer.println 做什么?尝试完全复制和粘贴我使用 System.out 的内容,看看它是否适合您...
  • @Vale 你在哪里运行这个EclipseNetbeansCommand Prompt
  • Printer 是另一个类,它只是 'System.out.println(s)' 其中 s 是我发送的字符串。无论如何,我发现我在使用扫描仪时遇到了问题:无论我做什么,我都会得到那个异常......是的,我正在使用 Eclipse Luna 4.4 控制台
  • @Vale 你在用import java.util.Scanner吗?确保你有正确的Scanner 类...
【解决方案3】:

这行得通。肯定有更好的解决方案。

编辑正如预期的那样。检查this

import java.util.Scanner;

public class NewMain{
  static boolean badNumber;
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    do{
      System.out.print("Please print your number: ");
      try{
        int i = sc.nextInt(); 
        System.out.println("Your Number is: " + i);
        badNumber = false;
      }
      catch(Exception e){
        System.out.println("Bad number");
        sc.next();
        badNumber = true;
      }
    }while(badNumber);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多