2015-11-22 1 views
0

Пожалуйста, помогите ... Мне нужно написать программу, которая отображает четные и нечетные числа, основанные на пользовательском вводе, но навсегда кончится во время моего последнего заявления печати.Как отображать четные и нечетные числа на основе ввода пользователем? - java

Вот что я до сих пор, что не так?

import java.util.Scanner; 
public class Integer { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int n = 0; 
    int odd = 0; 
    int even = 0; 

    System.out.println("How many numbers will be entered?"); 
    n = input.nextInt(); 

    while (n < 0 || n > 100) { 
    System.out.println("ERROR! Valid range 0-100. RE-Enter:"); 
    n = input.nextInt(); 
    } 

    while(n >= 0) { 
    System.out.println("Now enter " + n + " integers: "); 
    int num = input.nextInt(); 

    while(num > 0) { 
    for(int i = 0; i <= n; i++){ 
     if (i % 2 == 0) { 
     even++; 
     } 
     else { 
     odd++; 
     } 
     System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers."); 
     } 
     } 
    } 
    } 
} 
+0

Ну, отступ неправильно, для начала. Исправление этого поможет вам найти вашу проблему. В противном случае добавьте инструкции печати или используйте отладчик. Значимые имена переменных также могут помочь увидеть проблему. – hagello

ответ

0

У вас есть пара проблем со слишком большим количеством циклов. Вы не уменьшаете n в любом месте, но вы также выполняете цикл на num, тогда как он больше 0. Таким образом, он будет зависеть навсегда, если они будут придерживаться чего-то другого, кроме 0.

System.out.println("Now enter " + n + " integers: "); 
while(n >= 0) { 
    int num = input.nextInt(); 
    if(num > 0) { 
     if (num % 2 == 0) 
     even++; 
     else 
     odd++; 
    } 
    n--; 
    } 

    System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers."); 
2
Scanner input = new Scanner(System.in); 
int n = 0; 
int odd = 0; 
int even = 0; 

System.out.println("How many numbers will be entered?"); 
n = input.nextInt(); 

while (n < 0 || n > 100) { 
    System.out.println("ERROR! Valid range 0-100. RE-Enter:"); 
    n = input.nextInt(); 
} 

while (n > 0) { 
    System.out.println("Now enter integer " + n + ": "); 
    int num = input.nextInt(); 

    if (num % 2 == 0) { 
     even++; 
    } else { 
     odd++; 
    } 
    n--; 
} 
System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers."); 

Объяснение: Вы обрабатываете n входов от пользователя и просто проверить если вход или нечетный с Условным оператором. Вы слишком усложняли это.

+0

, так что вы бы рекомендовали удалить это заявление? Или просто добавьте n--; где-то? –

+0

Добавьте 'n -;' в конец цикла while (n> = 0). – ehehhh

+0

Также в конце цикла while (num> 0) 'вы должны добавить' num -; ', что должно приблизить вас к правильному решению, что бы это ни было. – ehehhh

-1

Бесконечные/непрерывные циклы происходят из-за input.nextInt(), и это связано с поведением класса Scanner класса next().

next(), nextInt() и другие его варианты не перемещают курсор на следующую строку (конец текущей строки - вместо этого считывает первый полный токен с разделителем по умолчанию в виде пробела). С другой стороны, метод nextLine() считывает весь ввод и перемещает курсор на следующую строку.

Ваш код можно исправить, добавив input.nextLine(), чтобы переместить курсор в начало строки, прежде чем принимать следующий вход. См. Ниже измененный код.

public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int n = 0; 
     int odd = 0; 
     int even = 0; 

     System.out.println("How many numbers will be entered?"); 
     n = input.nextInt(); 

     while (n < 0 || n > 100) { 
      System.out.println("ERROR! Valid range 0-100. RE-Enter:"); 
      n = input.nextInt(); 
     } 


     for(int i = 0 ; i < n; i++) { 
      System.out.println("Now enter integer " + (i+1) + " of " + n + " integers: "); 

      int num = input.nextInt(); 
      while(num < 0) { 
       System.out.println("ERROR! Valid range 0-100. RE-Enter:"); 
       num = input.nextInt(); 
      } 

      //this line is needed to move the input cursor to next line (due to use of nextInt() above) 
      input.nextLine(); 

      if(i%2==0) { 
       even++; 
      } else { 
       odd++; 
      } 
     } 

     System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers."); 
    } 
+0

На самом деле 'while (n < 0 || n > 100)' необходимо для того, чтобы подслушивать пользователя для правильного ввода до его получения. – ehehhh

+0

@ehehhh спасибо за указание, я полностью пропустил это ... в любом случае, обновил ответ. Вопрос о непрерывном цикле был вызван методом nextInt() в цикле while. Как вы думаете? – Raf

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