2017-02-19 16 views
-1

Я делаю простую программу, в которой пользователь вводит номер класса ученика (cn) и класс этого ученика (ngrade). Я пытался добавить исключение, проверяющее, являются ли входы cn и ngrade целыми числами. Если нет, пользователь будет проинформирован о том, что он недействителен и просит повторно ввести данные.Проверьте цикл, если ввод все целое

проблема: я использовал цикл while для проверки входов по всему циклу. но я получаю бесконечный цикл.

КОД:

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: "); 

      } 

     } 
    } 
} 
+0

Связанный: [Проверка ввода с использованием java.util.Scanner] (http://stackoverflow.com/questions/3059333/validating-input-using-java-util-scanner), [Как использовать сканер для accept only valid int as input] (http://stackoverflow.com/questions/2912817/how-to-use-scanner-to-accept-only-valid-int-as-input) – Pshemo

ответ

-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; 
} 
+0

Примечание: я начал записывать этот ответ прежде чем он был отмечен как дубликат. Я оставлю этот ответ здесь, чтобы ОП мог увидеть один из способов решения этой проблемы. –

+0

Пожалуйста, добавьте пояснительный текст и сделайте его wiki сообщества –

+0

Когда вы отредактируете ответ, вы увидите флажок, который делает именно это. Это должно быть довольно легко найти. –