如何要求重新输入而不仅仅是显示错误。

huangapple go评论85阅读模式
英文:

How can I ask for an input again instead of just having an error

问题

public class Mystuff {
    public static void main(String[] args) {
        System.out.println("请输入一个字符串:");
        String s = SubProgram.string();
        System.out.println("输入的字符串为:" + s);
        int i = SubProgram.getInt();
        System.out.println("输入的整数为:" + i);
    }
}

类:

import java.util.Scanner;

public class SubProgram {
    private static final Scanner INPUT = new Scanner(System.in);
    
    public static String string() {
        String s = INPUT.nextLine();
        return s;
    }

    public static int getInt() {
        System.out.println("请输入一个数字:");
        while (!INPUT.hasNextInt()) {
            System.out.println("输入错误,请重新输入数字:");
            INPUT.next(); // 清除错误输入
        }
        int num = INPUT.nextInt();
        return num;
    }
}
英文:

So I want to ask the user for an input. The thing is that I also want the program to give an error message and ask for an input again if the user, instead of a number, try and type something that's not a number.

public class Mystuff {
    public static void main(String[] args) {
        System.out.println("Write your string");
        String s = SubProgram.string();
        System.out.println("The string: " +s);
        int i = SubProgram.getInt();
        System.out.println("The int: " +i);    
    }
}

Classes:

import java.util.Scanner;

public class SubProgram {
    private static final Scanner INPUT = new Scanner(System.in);
    
    public static String string() {
        String s = INPUT.nextLine();
        return s;
    }

    public static int getInt(){
            System.out.println("Write your number");
            int num = INPUT.nextInt();
            return num;
    
}
}

答案1

得分: 0

为了重复执行某个操作,可以使用循环。

基本的模式是:

 do {
    打印提示信息;
    读取输入;
    验证输入;
    如果无效,打印错误消息;
 } while (尚未提供有效输入);

一个合理的方法是在“验证输入”步骤中设置一个标志(比如说,valid)为真或假,然后循环是 while (!valid)

对于使用 nextInt(),如果输入不是有效的整数,它将抛出异常。你需要捕捉那个异常(参见 try-catch 语句)并使用它来设置“无效”。

  do {
      try {
         ..blah blah(省略部分)
         n = scanner.nextInt();
         valid = true;
      }
      catch (NumberFormatException ex) {
         在这里打印错误;
         valid = false;
      }
 }  while (!valid);

我相信有了这些解决方案的概要,你可以编写实际的代码。

英文:

To repeat something, use a loop.

The basic pattern is:

 do {
    print a prompt;
    read input;
    validate input;
    if not valid, print error message;
 } while (valid input has not been provided);

A reasonable approach is to set some flag (say, valid) true or false in the "validate input" step, and then the loop is while (!valid).

For use of nextInt(), it will throw an exception if the input is not a valid integer. You'll need to catch that exception (see try-catch statement) and use that to set "not valid".

  do {
      try {
         ..blah blah
         n = scanner.nextInt();
         valid = true;
      }
      catch (NumberFormatException ex) {
         print error here;
         valid = false;
      }
 }  while (!valid);

I trust that, with these sketches of a solution, you can write the actual code.

答案2

得分: 0

如您已被告知,请使用循环,例如:

public static int getInt(){
    String num = null;
    while (num == null) {
        System.out.println("请输入您的数字");
        num = INPUT.nextLine();
        if (!num.matches("\\d+")) {
            System.err.println("提供的数字无效! (" + num + ")"); 
            num = null;
        }
    }
    return Integer.valueOf(num);
}
英文:

As you have already been informed, use a loop, for example:

public static int getInt(){
    String num = null;
    while (num == null) {
        System.out.println("Write your number");
        num = INPUT.nextLine();
        if (!num.matches("\\d+")) {
            System.err.println("Invalid number supplied! (" + num + ")"); 
            num = null;
        }
    }
    return Integer.valueOf(num);

}

huangapple
  • 本文由 发表于 2020年10月5日 09:43:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/64201495.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定