2016-06-04 3 views
1

Итак, мой профессор дал нам задание, которое просит пользователя ввести 5 чисел (51-99) и уникальных (не повторяющихся). Я просто не могу понять, почему мой цикл вложенных циклов внутри цикла while не увеличивает значение i, я подозреваю, что это break;, но без этого цикл for продолжает цикл. Любая помощь была бы потрясающей. Спасибо.Почему мой код не увеличивается?

public static void main(String[] args) { 
    int[] userArray; 
    userArray = new int[5]; 
    int real = 0; 

    System.out.println("Please print out 5 numbers between 50 and 100. "); 
    Scanner entry = new Scanner(System.in); 

    while (real < 5) { 
     int count = entry.nextInt(); 
     boolean aCount = isValid(count); 

     if (aCount == true) { 
      for (int i =0; i < userArray.length; i++) { 
       userArray[i] = count; 
       real++; 
       break; 
      } 
     } else { 
      System.out.println("That is not a valid number."); 
     } 
    } 
} 

public static boolean isValid(int a) { 
    if (a > 50 && a < 100) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

Вы 'for-loop' заполняете' userArray' последним значением, введенным пользователем, вместо этого вам нужно использовать 'real' только как индекс следующего vaue. – MadProgrammer

+2

' break' вырывает вас из цикл for; вы можете также не иметь цикл for, если у вас есть оператор 'break'. – schmidt73

+0

Что заставляет вас думать, что он не увеличивается? – Gendarme

ответ

2

Я получил его, ребята! Мне просто пришлось снять петлю для петли и поместить ее в:

  userArray[i] = count; 
      i++; 
      real++; 

Спасибо schmidt73 и всем, кто помог!

+0

Без петли нет 'i', есть ли? – Gendarme

+0

Есть, я только что добавил int i = 0; наверху, чтобы он не зациклился. –

+0

Не забудьте проверить наличие дубликатов (* уникальный (не повторяющийся) *). –

1
int i=0; 
    while (real < 5) { 
    int count = entry.nextInt(); 
    boolean aCount = isValid(count); 
    if (aCount == true) { 
      userArray[i++] = count; 
      real++; 

    } else { 
     System.out.println("That is not a valid number."); 
    } 
} 

Я думаю, это то, что вы пытаетесь сделать.

+0

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

0

Во-первых, вам также необходимо проверить, содержит ли массив значение, которое вы пытаетесь добавить (в подтверждение). Вы могли бы сделать что-то вроде

public static boolean isValid(int[] arr, int real, int a) { 
    if (a > 50 && a < 100) { 
     for (int i = 0; i < real; i++) { 
      if (arr[i] == a) { 
       return false; 
      } 
     } 
     return true; 
    } 
    return false; 
} 

Тогда ваш метод main может быть записан как

int[] userArray = new int[5]; 
int real = 0; 
System.out.println("Please print out 5 numbers between 50 and 100. "); 
Scanner entry = new Scanner(System.in); 
while (real < 5) { 
    int count = entry.nextInt(); 
    if (isValid(userArray, real, count)) { 
     userArray[real++] = count; 
    } else { 
     System.out.println("That is not a valid number."); 
    } 
} 
System.out.println("The array contains: " + Arrays.toString(userArray)); 
Смежные вопросы