2017-01-31 3 views
0

Итак, я пытаюсь поймать эти пользовательские входы, которые я могу сделать, но проблема в том, что когда я его поймаю, он не возвращается к введенному пользователем ошибке (InputMismatchException), но вместо этого он вернется к началу цикла. Скажем, если пользователь делает ошибку на втором входе, он вернется к первому входу, которое пользователь правильно напечатал. Я просто оставил его основным и удалил мою попытку.Несколько пользовательских входов с Try Catch InputMismatchException

public class TestRefuseTruck { 

    public static void main(String[] args) { 
     int maxBins; 
     int rate; 
     int weight; 
     int count = 0; 
     Scanner in = new Scanner(System.in); 
     try { 
      System.out.println("Enter the number of bins the truck can collect: "); 
      maxBins = in.nextInt(); 
      System.out.println("Enter the cost per kilo:"); 
      rate = in.nextInt(); 
      RefuseTruck r = new RefuseTruck(maxBins, rate); 
      while (count < maxBins) { 
       System.out.println("Enter the weight for bin " + (count + 1)); 
       weight = in.nextInt(); 
       if (r.collectBin(weight) == true) { 
        count++; 
       } 
      } 
      r.printStats(); 
     } catch (InputMismatchException e) { 
      System.out.println("Incorrect Input."); 
     } 
    } 
} 
+3

Где ваш 'try-catch'? – Berger

+0

где ваш класс 'RefuseTruck'? –

+0

@ RajS.Rusia это не имеет значения. Я только пытаюсь поймать inputmismatch в тестовом классе и обрабатывать его там. – Annihil8

ответ

1

Обновлено

Держите каждый вход в отдельном While-цикле, пока вход не является правильным:

int maxBins = 0; 
int rate = 0; 
int weight = 0; 
int count = 0; 
Scanner in = new Scanner(System.in); 
while(maxBins == 0){ 
    try { 
     System.out.println("Enter the number of bins the truck can collect: "); 
     maxBins = in.nextInt(); 
    } catch (InputMismatchException e) { 
     System.out.println("Incorrect Input."); 
    } 
} 
while(rate == 0){ 
    try { 
     System.out.println("Enter the cost per kilo:"); 
     rate = in.nextInt(); 
    } catch (InputMismatchException e) { 
     System.out.println("Incorrect Input."); 
    } 
} 
RefuseTruck r = new RefuseTruck(maxBins, rate); 
while (count < maxBins) { 
    try { 
     System.out.println("Enter the weight for bin " + (count + 1)); 
     weight = in.nextInt(); 
    } catch (InputMismatchException e) { 
     System.out.println("Incorrect Input."); 
     continue; 
    } 
    if (r.collectBin(weight) == true) { 
     count++; 
    } 
} 
r.printStats(); 

Имейте в виду, что это касается «0» в качестве недопустимого ввода (цикл выполняется еще раз).

+0

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

Смежные вопросы