2016-09-24 6 views
0

Ребята, я новичок в этом. Я выполняю задание для моей группы прогов, поэтому, пожалуйста, несите меня.JAVA: если выражение внутри цикла for и выход из цикла for

Так что мне нужно написать код, который может вводить возраст людей, от целых чисел от 1 до 120 включительно. Затем пользователь должен вычислить средний возраст и должен быть рассчитан как действительный номер. Но пользователь должен вводить возрастные значения до тех пор, пока пользователь не войдет в 0, чтобы остановить программу, а затем вывести среднее значение. Если пользователь вводит недопустимый возраст, программа должна продолжать повторно запрашивать пользователя до тех пор, пока не наступит срок действия.

Так что я сделал свою часть. Я создал код, и я придумал это:

public static void main(String[] args) 
{ 

    int ageValue = 0; 
    double getAge; 
    getAge = inputAge(); 
    System.out.println("Average age is: " + getAge); 
} 

public static double inputAge() 
{ 
    int ageValue = 0; 
    double avgAge = 0; 
    Scanner sc = new Scanner(System.in); 
    for (int i = 1; i <= 120; i++) 
    { 
     System.out.println("Enter age"); 
     ageValue += sc.nextInt(); 

     avgAge = ageValue/(double) i; 
     if (ageValue == 0) 
     { 
      System.out.println("Average age is: " + avgAge); 
      System.exit(0); 
     } 
     while (ageValue < 0 || ageValue > 120) 
     { 
      System.out.println("Invalid input. Try again!"); 
      ageValue = sc.nextInt(); 
     } 

    } 

    return avgAge; 
} 

Теперь я положил мой код, и я получил мою средняя формулу как-то работает. Теперь проблема в том, что когда я нажимаю 0, она не запрашивает оператор «if». Однако, когда появляется первое приглашение «Введите свой возраст», и я нажал 0, сработало заявление «if». Но для каждой итерации программа не позволит мне выполнить оператор.

С другой стороны, я также пытаюсь выяснить, как выйти из цикла без использования break или System.exit(), потому что это даст мне нулевые отметки. То, что я хотел, - это когда я нажимаю 0, он должен выйти из цикла и вывести среднее значение, как то, что говорится в задаче.

Я не знаю, можете ли вы это сделать. Правильно ли код? Я на правильном пути? Я что-то упускаю???

Приветствия

ответ

1

Вы могли бы рассмотреть подход do while цикла. Это позволит вашему сценарию нормально запускаться один раз и выходить после того, как пользователь вводит 0:

int ageValue = 0, numOfAges = 0, sumOfAges = 0; 
do { 
    System.out.println("Enter age"); 
    ageValue = sc.nextInt(); 
    if (ageValue < 0 || ageValue > 120) 
     System.out.println("Bad value... try again"); 
    else if (ageValue != 0) { 
     sumOfAges += ageValue; 
     numOfAges++; 
    } 
} while (ageValue != 0); 
return ((double)sumOfAges/numOfAges); 
+0

, а также исправление различных ошибок, это также делает разделение только один раз. следует отметить, что это вызовет исключение, если пользователь введет что-то, что nextInt не может решить. – Rodney

+0

О, действительно, не было известно о цикле do while. Спасибо, что решил мою проблему – Seth

0

С другой стороны, я также изо всех сил, чтобы выяснить, как выйти из цикла без перерыва или System.exit(), потому что даст мне нулевой отметки.

Вы можете иметь еще одно условие в вашей цикл, как этот

boolean finished = false; 
for (int i = 1; i <= 120 && finished == false; i++) 

и заменить

System.exit(0) 

с

finished = true; 

Однако, я бы вопрос, почему использование «перерыв «забьет вас нулевыми отметками. Это именно то, что предназначалось для разрыва сценария.

+0

Спасибо за ответ. И yeh он должен использоваться только для операторов case switch. Не знаю почему, но мой наставник сказал, что – Seth

+0

«должен использоваться только для корпуса коммутатора» .. Ну, это его мнение. Учебники Oracle дают хорошие примеры того, когда подходит для выхода из цикла for https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html – Rodney

0

вы можете попробовать этот подход.

Я немного скорректировал условие выхода и способ усреднения.

Цикл «для», который вы показываете в своем коде, ограничивает количество образцов до 120, но вопрос не говорит об этом, поэтому я взял на себя смелость обобщить ваш вопрос на любое количество выборок в среднем.

Прежде всего, вы должны искать условную структуру «if-else», поскольку это было основным недостатком вашего кода.

https://en.wikipedia.org/wiki/Conditional_(computer_programming)

вы можете думать, как проблема выражается как:

  1. вычислить среднее в серии
  2. Серию является клавиатура вводится
  3. когда ноль введенные, выйти из и возвратить текущее среднее значение
  4. , когда вводится какое-либо значение из [0,120], выдает сообщение и продолжается цикл без изменения вещь в серии
  5. , когда какое-либо значение в связанном [1119] вводится добавить значение в серии и пересчитывать средний

    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.Scanner; 
    
    public class Test 
    { 
        public static void main(String[] args) 
        { 
         System.out.println("Final Average age is: "+inputAge()); 
        } 
    
        private static double inputAge() 
        { 
         int ageValue=0; 
         double avgAge=0; 
         boolean shouldExit=false; 
         Scanner sc=new Scanner(System.in); 
         List<Integer> samples=new ArrayList<Integer>(); 
         // loop until flag is true 
         while(!shouldExit) 
         { 
    
          System.out.println("Enter age"); 
          ageValue=sc.nextInt(); 
          if(ageValue==0) 
          { 
           shouldExit=true; 
          } 
          else if(ageValue<0||ageValue>120) 
          { 
           System.out.println("Invalid input. Try again!"); 
          } 
          else 
          { 
           // add current input in the samples and calculate average over all the samples 
           samples.add(ageValue); 
           avgAge=getAvg(samples); 
           System.out.println("Current Average age is: "+avgAge); 
          } 
         } 
         sc.close(); 
         return avgAge; 
        } 
    
        private static double getAvg(List<Integer> samples) 
        { 
         double avgAge=0; 
         for(Integer tmp:samples) 
         { 
          avgAge+=tmp; 
         } 
         return avgAge/(double) samples.size(); 
        } 
    } 
    
+0

Посмотрите на это! – Seth

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