【问题标题】:WHILE Loop Condition Does Not Validate InputWHILE 循环条件不验证输入
【发布时间】:2015-05-19 17:40:11
【问题描述】:

我有一个WHILEloop,用于检查特定学生的分数。但是,如果值无效(输入小于0且大于100)则不会循环:

int marks= -1;

System.out.print("Student Marks (/100): ");
                while (((marks< 0) || (marks> 100))) {
                    try {
                        marks = Integer.parseInt(sc.nextLine());
                        break;
                    } catch (NumberFormatException nfe) { 
                        System.err.println("Error: Invalid Mark(s)");
                        System.out.print("Student Marks (/100): ");
                    }
                }

如果输入了数字以外的字符,它确实会捕获异常。

但如果 value 小于 0 或大于 100,则不会再次循环。

我尝试对其进行了许多更改,但没有结果。

感谢您提供的任何帮助!

【问题讨论】:

  • 您的循环按原样仅在标记无效时循环。
  • 因为您之前没有将标记解析为整数 - `while (((marks 100)))` - 这行我不确定您是否可以检查用 0 和 100。我不确定只是想知道。

标签: java exception netbeans while-loop conditional-statements


【解决方案1】:

您应该删除break 语句,因为无论输入什么marks 值,它都会使您跳出循环。

【讨论】:

  • 那么它会循环吗?因为标记总是设置为 -1,所以它既不递增也不递减。
  • @Apurva 如果您删除了 break 语句,它将循环到 (((marks&lt; 0) || (marks&gt; 100)))。否则它将在Integer.parseInt 不抛出 NumberFormatException 的第一次迭代后中断。我还将添加一个检查 sc.nextLine() 不返回 null(在调用 parseInt 之前),在这种情况下,您应该退出循环,因为没有更多的输入可用。
  • 谢谢@Eran。删除 breakstatement 会恢复循环
【解决方案2】:

如果要保持循环运行,请始终使用 continue 而不是 break。

【讨论】:

    【解决方案3】:

    您可以使用if 条件检查while 循环内的marks,在这里您可以使用break -

    import java.util.Scanner;
    
    public class TakeInput{ 
    
        public static void main(String args[]){
    
            int marks= -1;
            Scanner sc = new Scanner(System.in);
    
            System.out.print("Student Marks (/100): ");
            while (sc.hasNext()) {
                try {
                    marks = Integer.parseInt(sc.nextLine());
                    if(marks<0 || marks>100){
                        break;
                    }
                    //do something
                    // with the marks
    
                    //take new marks
                    System.out.print("Student Marks (/100): ");
                } catch (NumberFormatException nfe) { 
                    System.err.println("Error: Invalid Mark(s)");
                    System.out.print("Student Marks (/100): ");
                }
            }
        }
    
    }  
    

    现在只要你输入除数字 n 以外的任何内容,n&lt;0 || n&gt;100 就会继续循环。任何NumberFormatExeption 将您带到catch 块。

    如果您输入 34,那么它会转到 while 块并提示输入下一个数字。 然后,如果您输入 56,那么它会执行相同的操作。
    当您输入任何 String 而不是数字时,它会捕获 block
    此过程将继续,直到您输入无效数字 (n>100 || nCtrl+C 也会退出循环。

    希望对您有所帮助。
    非常感谢。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2018-04-16
      相关资源
      最近更新 更多