如果输入都是整数,则检查循环

时间:2017-02-19 13:37:17

标签: java loops exception

我正在编写一个简单的程序,用户输入一个学生的班级编号(cn)和该学生的班级(ngrade)。我试图添加一个异常,检查cn和ngrade的输入是否为整数。如果不是,将通知用户它无效并要求重新输入详细信息。

问题:我确实使用while循环来检查整个循环中的输入。但是我得到了一个无限循环。

CODE:

import java.io.*;
import java.util.*;

public class trrying {

    public static void main(String[] args) {
        int ngrade;
        int cn;
        int A = 0, B = 0, C = 0, D = 0, E = 0;
        boolean test = false;
        Scanner sn = new Scanner(System.in);

        while (!test) {
            try {
                for (int i = 0; i <= 2; i++) {

                    System.out.println("Enter class number: ");
                    cn = sn.nextInt();
                    System.out.println("Enter numeric grade: ");
                    ngrade = sn.nextInt();
                    System.out.println("Letter Grade: ");

                    if (ngrade >= 90) {
                        A++;
                        System.out.println("A");
                    } else {
                        System.out.println("HELLO");
                    }

                    test = true;

                }
                test = false;
            } catch (Exception e) {
                System.out.println("ERROR! ");
                // System.out.println("Enter class number: ");

            }

        }
    }
}

1 个答案:

答案 0 :(得分:-2)

获得所需行为的一个选项是使用Scanner#nextLine()将每个输入作为字符串读入,然后手动尝试将该输入解析为整数。如果成功,接受该输入并继续您的逻辑。如果不成功,则捕获异常,并重复循环以获得另一个用户输入。

for (int i=0; i <= 2; i++) {
    String line = "";
    while (true) {
        System.out.println("Enter class number: ");
        line = sn.nextLine();
        try {
            cn = Integer.parseInt(line);
            break;
        } catch(Exception e) {
            System.out.println("Enter class number as an integer only.");
        }
    }
    while (true) {
        System.out.println("Enter numeric grade: ");
        line = sn.nextLine();
        try {
             ngrade = Integer.parseInt(line);
             break;
        } catch(Exception e) {
            System.out.println("Enter numeric grade as an integer only.");
        }
    }

    System.out.println("Letter Grade: ");

    if (ngrade >= 90) {
        System.out.println("A");
    }        
    else {
         System.out.println("HELLO");
    }

    test = true;
}