3

我只是在玩 Java。我试图强制我的程序只接受 3 位数字。我相信我已经使用 while 循环成功地做到了这一点(如果我错了,请纠正我)。但是如果用户输入一个字符串,我该如何去打印一个错误语句。例如:“ABC”。

我的代码:

    import java.util.Scanner;
    public class DigitSum {

    public static void main(String[] args) {

    Scanner newScan = new Scanner(System.in);

        System.out.println("Enter a 3 digit number: ");
        int digit = newScan.nextInt();

        while(digit > 1000 || digit < 100)
            {           
             System.out.println("Error! Please enter a 3 digit number: ");
             digit = newScan.nextInt();
            }

        System.out.println(digit);
       }
    }
4

7 回答 7

3

这个怎么样?

public class Sample {
    public static void main (String[] args) {
        Scanner newScan = new Scanner (System.in);

        System.out.println ("Enter a 3 digit number: ");
        String line = newScan.nextLine ();
        int digit;
        while (true) {
            if (line.length () == 3) {
                try {
                    digit = Integer.parseInt (line);
                    break;
                }
                catch (NumberFormatException e) {
                    // do nothing.
                }
            }

            System.out.println ("Error!(" + line + ") Please enter a 3 digit number: ");
            line = newScan.nextLine ();
        }

        System.out.println (digit);
    }
}

正则表达式版本:

public class Sample {
    public static void main (String[] args) {
        Scanner newScan = new Scanner (System.in);

        System.out.println ("Enter a 3 digit number: ");
        String line = newScan.nextLine ();
        int digit;

        while (true) {
            if (Pattern.matches ("\\d{3}+", line)) {
                digit = Integer.parseInt (line);
                break;
            }

            System.out.println ("Error!(" + line + ") Please enter a 3 digit number: ");
            line = newScan.nextLine ();
        }

        System.out.println (digit);
    }
}
于 2012-10-11T11:49:21.097 回答
2

在 try catch 块中嵌入用于读取 int 的代码,每当输入错误的输入时,它将生成异常,然后在 catch 块中显示您想要的任何消息

于 2012-10-11T11:26:59.887 回答
2

如果输入错误,这里nextInt方法本身会抛出一个错误。InputMismatchException

try {
  digit = newScan.nextInt() 
} catch (InputMismatchException e) {
  e.printStackTrace();
  System.err.println("Entered value is not an integer");
}

这应该做。

于 2012-10-11T11:39:22.590 回答
1

我将如何使用 if 语句。if 语句应该是这样的:

if(input.hasNextInt()){
    // code that you want executed if the input is an integer goes in here    
} else {
   System.out.println ("Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}

注意:如果您希望他们输入字符串而不是整数,请将 if 语句的条件更改为input.hasNextLine()而不是input.hasNextInt()

第二个注意事项:input这是我命名我的扫描仪。如果你给你的 pancakes 命名,那么你应该输入pancakes.hasNextInt()pancakes.hasNextLine()

希望我有所帮助,祝你好运!

于 2013-09-05T03:09:55.443 回答
1

如果用户输入诸如“abc”之类的字符串而不是数值,则您希望发生异常,那么这对您来说是正确的。InputMismatchException

让我给你一个基本的例子。

public static void main(String[] args)
    {
        Scanner ip = new Scanner(System.in);
        int a; 
        System.out.println("Enter Some Input");
        try{
            a = ip.nextInt();
        }
        catch(InputMismatchException msg){
            System.out.println("Input Mismatch Exception has occured " + msg.getMessage());
        }
    }
于 2017-04-19T12:48:35.600 回答
0

当您抓取输入或拉动输入字符串时,请运行parseInt. yourString如果不是,这实际上会引发异常Integer

Integer.parseInt(yourString)

如果它抛出一个异常,你就知道它不是一个有效的输入,所以此时你可以显示一条错误消息。以下是有关的文档parseInt

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String )

于 2012-10-11T11:23:44.197 回答
0

您可以通过以下方式检查字符串是否为数值:

1) 使用 try/Catch 块

try  
{  
  double d = Double.parseDouble(str);  
}catch(NumberFormatException nfe)  {
  System.out.println("error");
}  

2)使用正则表达式

if (!str.matches("-?\\d+(\\.\\d+)?")){
  System.out.println("error");
}

3) 使用 NumberFormat 类

NumberFormat formatter = NumberFormat.getInstance();
ParsePosition pos = new ParsePosition(0);
formatter.parse(str, pos);
if(str.length() != pos.getIndex()){
  System.out.println("error");
}

4) 使用 Char.isDigit()

for (char c : str.toCharArray())
{
    if (!Character.isDigit(c)){
      System.out.println("error");
    }
}

您可以查看如何在 Java 中检查字符串是否为数字以获取更多信息

于 2012-10-11T11:34:12.723 回答