java中带负数的扫描器中的奇怪行为

java中带负数的扫描器中的奇怪行为,java,java.util.scanner,Java,Java.util.scanner,我试图找到答案,但却找不到,也许我要问的问题有点奇怪,我想知道这里到底出了什么问题。(对不起,我的英语有点差,但我会尽力的) 这就是交易,我使用一个方法在java中返回一个int,该方法使用try-catch来避免程序爆炸(请注意,我刚刚开始编程和java) 好的,这个方法使用了如下的try-catch: public int safeEnter(String message, int min, int max) { /** * This method takes so

我试图找到答案,但却找不到,也许我要问的问题有点奇怪,我想知道这里到底出了什么问题。(对不起,我的英语有点差,但我会尽力的)

这就是交易,我使用一个方法在java中返回一个int,该方法使用try-catch来避免程序爆炸(请注意,我刚刚开始编程和java)

好的,这个方法使用了如下的try-catch:

    public int safeEnter(String message, int min, int max) {
    /**
     * This method takes some parameters and validates the true enter of an int
     * inside some ranges
     */
    int aux;
    String auxInt;

    do {
        auxInt = input.nextLine().trim();
        try {
            aux = Integer.parseInt(auxInt);
        } catch (NumberFormatException ex) {
            System.out.println("Enter a " + message + " between " + min + " & " + max);
            aux = Integer.MIN_VALUE;
        }
    }
    while(aux < min || aux > max);        
    return aux;
}
int month = safeEnter("month", 1, 12);
如果我给它一个字符或一个单词而不是一个int,这将验证问题,并再次要求一个int,这实际上很好地按照计划工作,但如果我给它一个负数,我应该在它之前输入2,以显示消息并再次要求数字,如果我给它一个字符字符串或一个介于范围或范围外的整数,但它是正数,它就不会出现

你认为这里有什么问题?因为我“想”它只是好的,一些关于扫描仪的东西,我应该知道或者我错过了

最好的,
Mauricio

负数是有效整数,不会引发NumberFormatException。因此,循环条件的计算结果为true,do while循环再次执行,扫描仪再次请求输入

您可以尝试以下操作:

Scanner input = new Scanner(System.in);
while(true) {
    try {
        auxInt = input.nextLine().trim();
        aux = Integer.parseInt(auxInt);

        if(aux >= min & aux <= max)
            break;

        System.out.println("Enter a " + message + " between " + min + " & " + max);
    } catch (NumberFormatException ex) {
        System.out.println("Enter a " + message + " between " + min + " & " + max);
}
扫描仪输入=新扫描仪(System.in);
while(true){
试一试{
auxInt=input.nextLine().trim();
aux=Integer.parseInt(生长素);

如果(aux>=min&aux负数是有效整数,并且不抛出NumberFormatException。因此,循环条件的计算结果为true,do while循环再次执行,扫描仪再次请求输入

您可以尝试以下操作:

Scanner input = new Scanner(System.in);
while(true) {
    try {
        auxInt = input.nextLine().trim();
        aux = Integer.parseInt(auxInt);

        if(aux >= min & aux <= max)
            break;

        System.out.println("Enter a " + message + " between " + min + " & " + max);
    } catch (NumberFormatException ex) {
        System.out.println("Enter a " + message + " between " + min + " & " + max);
}
扫描仪输入=新扫描仪(System.in);
while(true){
试一试{
auxInt=input.nextLine().trim();
aux=Integer.parseInt(生长素);

如果(aux>=min&aux请给出输入值和期望的输出值-就像一个单元测试对不起,这是我第一次问这个问题,我的英语不是很好,这是什么意思?我告诉过这个方法验证int的输入,如果它收到一个字符串或一个字符,它会再次询问数字……请给我更多解释,我会做我的工作请给出输入值和期望的输出值-就像一个单元测试对不起,这是我第一次问这个问题,我的英语不是很好,你这是什么意思?我告诉过这个方法验证一个int的输入,如果它收到一个字符串或一个字符,它会再次询问这个数字…请给我更多解释,我会做我最好的mmmmm i我没想过,但是,那个数字超出了范围?是的,是他,然后再问一次,但什么也不告诉我!非常感谢!你是个天才!!!只是关于你给我的代码的另一个问题,而(真)这个“真”是什么意思,我的意思是,需要什么条件才能知道它是真是假?非常感谢,你在哪里超级有用的“真”和“false”是布尔值。所有循环条件都必须计算为布尔值(在代码中,有一个表达式auxmax计算为布尔值)。因此,“while(true)"是一个无限循环。请注意,在我的代码中,我有一个break语句来终止循环。好的,再次感谢,我想我们以不同的方式了解到了这一点,因为我们刚刚开始使用java和编程。^但是我理解你的意思,只是我们从来没有假设它会以这种方式工作。嗯,我没有想过,但是,这个数字超出范围?是的,是他,他又问了一次,但没有告诉我任何事!非常感谢!你是个天才!!!只是关于你给我的代码的另一个问题,而(真)这是“真”吗?我的意思是,什么条件才能知道它是真是假?非常感谢,你在哪里超级有用的“真”和“假”是布尔值。所有循环条件都必须计算为布尔值(在代码中,有一个表达式auxmax,其计算结果为布尔值)。因此,“while(true)”是一个无限循环。请注意,在我的代码中,我有一个break语句来终止循环。好的,再次感谢,我想我们以不同的方式了解到这一点,因为我们刚刚开始使用java和编程。^但我理解你的意思,只是我们从未假设它会以这种方式工作