测试输入是否为正整数

时间:2016-12-23 11:35:41

标签: java string int java.util.scanner

好吧,我似乎无法找到解决问题的明确答案。

我需要一个java中的程序,它可以返回用户输入的值,即一个正整数。

为了区别于许多其他类似的问题,我需要编程以便在输入字符串时不会崩溃。程序将需要重复提示用户输入,直到输入正整数。脚本将是这样的:

Input: 7.2
Error, try again: -5
Error, try again: -2.4
Error, try again: 3.77777
Error, try again: -1
Error, try again: 0
Error, try again: -33
Error, try again: microwave
Error, try again: -1
Error, try again: 4.2
Error, try again: hello
Error, try again: 3.14159
Error, try again: 4
4 is a positive integer.

重要的是,当输入类似单词之类的程序时程序不会崩溃。我无法想办法让程序做这样的事情。我可以在扫描仪中使用hasNextInt,但后来我不知道如何检查它是否大于零,因为在另一种情况下输入可能是一个字符串。

有人可以帮我解决一个会返回上述脚本的程序吗?非常感谢。

编辑:好的,我终于在另一个问题中找到了我正在寻找的答案。此解决方案不使用parseInt(),也不使用try / catch,这正是我所寻求的。很好,很简单。所以这是解决方案代码:

    Scanner in = new Scanner(System.in);
    int num;
    System.out.print("Input: ");
    do {
        while (!in.hasNextInt()) {
            System.out.print("Error, not integer. Try again: ");
            in.next(); 
        }
        num = in.nextInt();
        if (num<=0){
            System.out.print("Error, not positive. Try again: ");
        }
    } while (num <= 0);
    System.out.println(num + " is a positive integer.");

5 个答案:

答案 0 :(得分:1)

以这种方式尝试:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int value = -1;
    do {
        System.out.print("Input: ");
        String input = scanner.next();
        try {
            value = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("Error, try again: " + input);
        }
    } while (value < 1);
    System.out.println(value + " is a positive integer.");
}

答案 1 :(得分:0)

Integer.parseInt(String s)

就是为此写的。

答案 2 :(得分:0)

这是java中异常处理的link。通常,您只需将代码放入try块即可。然后,如果在该块中发生预期的异常,您的程序将在catch块中执行代码并继续它的工作。

答案 3 :(得分:0)

您需要以某种方式验证输入。如果输入的是Integer。然后你需要将它打印到屏幕上,如果输入是Long,那么你需要打印错误消息Try again

在下面的这个例子中,我创建了一个方法,它是C# TryParse方法的衍生物。 C# TryParseInt

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        while (true)
        {
            @SuppressWarnings("resource")
            Scanner reader = new Scanner(System.in); 
            System.out.println("Enter a number: ");

            String input = reader.next();
            tryParseInt(input);
        }
    }

    private static void tryParseInt(String input) {  
        try {  
            int val = Integer.parseInt(input);
            System.out.println(val + " is a positive Integer");
        } catch (NumberFormatException e) {
            System.out.println(input + " Is not a number/positive Integer, " + e.getMessage());
        }  
    }
}

它的作用是将输入解析为Integer,如果它没有这样做,因为输入是String或不是有效的Integer an {{1}被抛出。然后我可以打印出我想要的错误信息。

祝你好运!

答案 4 :(得分:0)

以下是两种情况:

情景1:
- 我假设正整数是指整数1,2,3,4等...
- 诸如4.00之类的值不会被视为整数

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int value = 0;
        System.out.print("Input: ");

        while (value < 1){
            String input = scanner.next();
            try {
                value = Integer.parseInt(input);
                if(value < 1){
                    System.out.print("Error, try again: ");}
            } catch (NumberFormatException e) {
                System.out.print("Error, try again: ");
            }
        }
        System.out.println(value + " is a positive integer.");
    }
}

情景2:
- 我假设正整数是指整数1,2,3,4等...
- 诸如4.00之类的值将被视为整数

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("Input: ");
        String value = "";
        boolean positiveIntegerNoDecimals = false;
        while (positiveIntegerNoDecimals == false) {
            value = scanner.next();
            positiveIntegerNoDecimals = isPositiveIntegerNoDecimals(value);

            if (positiveIntegerNoDecimals == false)
                System.out.print("Error, try again:");
        }
        System.out.println(value + " is a positive integer.");
    }

    private static boolean isPositiveIntegerNoDecimals(String input) {
        try {
            int value = -1;
            BigDecimal decimal = new BigDecimal(Double.parseDouble(input));
            int scale = decimal.scale();
            if (scale == 0)
                value = decimal.stripTrailingZeros().intValue();

            if (value > 0)
                return true;
        } catch (NumberFormatException e) {}
        return false;
    }
}