2014-09-07 5 views
1

Привет Я довольно новичок в java и пытаюсь познакомиться с ним, выполняя некоторые упражнения онлайн. Как я правильно закодировать время цикла так, чтобы каждый пользовательский ввод неправильно, это задает тот же вопрос снова и не переходит к следующей строке кодаПока цикл не работает

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Array { 
    public static void main(String[] args) { 
     Scanner dataIn = new Scanner(System.in); 
     int entries = 0; 
     List<Integer> grade = new ArrayList<Integer>(); 

     System.out.println("Enter number of students? "); 
     entries = dataIn.nextInt(); 
     boolean checker = true; 
     while (checker){ 
     for (int i = 0; i < entries; i++){ 

      int input; 
      int addToList; 
      System.out.println("Enter grade for student: "); 
      input = dataIn.nextInt(); 
      grade.add(input); 

      if (input >= 0 && input<= 100) { 

      }else { 
       System.out.println("invalid input try again.."); 
       checker = false; 
      } 
     } 
     } 

     int sum = 0; 
     int count = grade.size(); 
     double mean; 
     for (int grades : grade){ 
      sum+= grades; 
     } 
     mean =(double)sum/count; 

     System.out.println("The Grades are: " + grade); 
     System.out.println("The number of elements in the Array is " + grade.size()); 
     System.out.println("The average is: " + mean); 
    } 
} 
+1

Итак, вы хотите, чтобы 'checker' был' true', когда они 'invalid input try again..'? –

+0

'checker = true;' в другом случае это должно быть false –

+0

oh, так что то, что я сделал неправильно. Я действительно новичок в циклах, и я просто изучаю, как они работают – Onedaynerd

ответ

1

Ваша логика назад. Вы хотите, чтобы цикл продолжался, если вход неверен. Есть два способа исправить это:

  1. Изменить while(checker) в while(!checker)

  2. Изменение checker=false к checker=true после печати сообщения об ошибке. И установите checker=false в ветке if.

Это может помочь, если изменить имя вашей checker переменной к чему-то, что читает более непосредственно. Например, isInputCorrect читает очень красиво, когда вы пишете while(!isInputCorrect), и это также делает более понятным, что представляют значения true и false.

+0

Спасибо за ответ и предоставление рекомендаций также! – Onedaynerd

+0

@Onedaynerd Пожалуйста, примите ответ, который вы найдете наиболее полезным, когда сможете. –

0
While(checker) 

Это означает, что во время проверки, истинно пока цикл будет запущен. Чтобы остановить его, вы должны сделать его ложным. Посмотрите на свой код сейчас и посмотрите, как я сделал его истинным и ложным, следуя условиям if.

while (checker){ 
    for (int i = 0; i < entries; i++){ 

     int input; 
     int addToList; 
     System.out.println("Enter grade for student: "); 
     input = dataIn.nextInt(); 
     grade.add(input); 

     if (input >= 0 && input<= 100) { 
     // answer is right so checker goes to false to exit while loop. 
     checker = false; 

     }else { 
      System.out.println("invalid input try again.."); 
      // answer is wrong so checker remains true. 
      checker = true; 
     } 
    } 
+0

логически цикл for должен находиться за пределами цикла while, поскольку целью будет получение оценки для всех записей (или студентов). – ray

0

Вы могли бы попробовать это

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Array { 
    public static void main(String[] args) { 
     Scanner dataIn = new Scanner(System.in); 
     int entries = 0; 
     List<Integer> grade = new ArrayList<Integer>(); 
     System.out.println("Enter number of students? "); 
     entries = dataIn.nextInt(); 
     for (int i = 0; i < entries; i++) { 
      int input; 
      do{ 
       input = dataIn.nextInt(); 
       if (input >= 0 && input <= 100) { 
        grade.add(input); 
       }else{ 
        System.out.println("invalid input try again.."); 
       } 
      }while(!(input >= 0 && input <=100)); 
     } 
     dataIn.close(); 
     int sum = 0; 
     int count = grade.size(); 
     double mean; 
     for (int grades : grade) { 
      sum += grades; 
     } 
     mean = (double) sum/count; 
     System.out.println("The Grades are: " + grade); 
     System.out.println("The number of elements in the Array is " + grade.size()); 
     System.out.println("The average is: " + mean); 
    } 
} 
1

попробовать это:

boolean checker = true 
for(int i=0;i< entries;i++){ 
    int input; 

    System.out.println("Enter grade for student: "); 
    input = dataIn.nextInt(); 
     while(checker){ 
      if(input >= 0 && input<= 100){ 
       grade.add(input); 
       checker = false; 
      }else{ 
       System.out.println("invalid input try again.."); 
      } 
     } 
checker = true; 
} 
+0

вы забыли взять вход. Это будет бесконечный цикл println's – ray

+0

да, извините. почему существует бесконечный цикл? –

0

а не делать в то время как (шашка)

сделать петлю для While (бег) затем отправить его в keyboard.nextInt() , если его неправильный ответ, чем он будет зацикливаться, если его правильный, чем установленный, на false и код, который следует за wh ile loop

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