2015-11-09 2 views
2

У меня есть этот код ниже, который должен взять пользовательский ввод и сохранить его в массиве, и мне просто интересно, почему он не позволяет мне вводить какие-либо числа.Невозможно принять пользовательский ввод при использовании цикла while

Должно ли входная часть находиться внутри оператора if? И что является лучшим способом заставить его работать правильно?

import java.util.*; 

public class fun_with_loops { 

    static Scanner scan = new Scanner(System.in); 

    public static void main (String[] args) throws java.io.IOException 
    { 
     int[] numbers = new int[10]; 
     int numberSize = 0; 
     System.out.print("Enter a few numbers please\n"); 



     while (numbers.length < 10) 
     { 
      int input = scan.nextInt(); 
      if (input != 0) 
      { 
       numbers[numberSize] = input; 
       numberSize++; 
      } 
      else 
      { 
       break; 
      } 

     } 

    } 
} 
+1

Потому что ваш номер.length всегда будет 10, он никогда не будет меньше 10. Вам нужно использовать переменную count, чтобы принимать пользовательский ввод 10 раз для хранения в массиве. –

+1

gotcha спасибо! –

ответ

1

Проблема

Следующее выражение на управление с обратной связью по всегда оценивается как ложное:

while (numbers.length < 10) 

, поскольку длина массива фактически равна 10, как при объявлении.

Решение

Для того, чтобы программа работы, как ожидается, вы должны использовать numberSize переменную в качестве контроля:

while (numberSize < 10) 

, поскольку он растет в зависимости от количества входов.

0

Как указано в заявлении Am_I_Helpful, вы используете цикл while для значения, которое не изменится. Я не уверен, что в этом случае требуется использование. Поскольку вы хотите зацикливать определенное количество раз, вы можете использовать цикл for. Если количество раз будет зависеть от размера вашего массива, вы все равно можете заменить «10» на длину вашего массива (numbers.length).

for (int i; i< 10; i++) 
    { 
     int input = scan.nextInt(); 
     if (input != 0) 
     { 
      numbers[numberSize] = input; 
      numberSize++; 
     } 
     else 
     { 
      break; 
     } 

    } 

Надеясь, что это помогло!

Dan

короткое и сладкое резюме, когда использовать каждый цикл: http://mathbits.com/MathBits/CompSci/looping/whichloop.htm

, но, конечно, это всегда зависит от вашей цели при кодировании, так что иногда трудно сказать, что лучше всего, если вы а не одно кодирование.

0

Поскольку массив инициализирован до размера 10, длина всегда будет равна 10. Необходимо использовать переменную счетчика. Вот код:

static Scanner scan = new Scanner(System.in); 

public static void main (String[] args) throws java.io.IOException 
{ 
    int[] numbers = new int[10];   
    System.out.print("Enter a few numbers please\n"); 


    int count = 0; 
    while (count < 10) 
    { 
     int input = scan.nextInt(); 
     if (input != 0) 
     { 
      numbers[count] = input; 
      count++; 
     } 
     else 
     { 
      break; 
     } 

    } 
0

Свойство length возвращает размер массива, а не количество элементов, которые присутствуют в массиве. Вам нужно отслеживать количество элементов в массиве самостоятельно.

for(int eleCount = 0; eleCount < 10; eleCount++) 
    { 
     int input = scan.nextInt(); 
     if (input != 0) 
     { 
      numbers[eleCount] = input; 
     } 
     else 
     { 
      break; 
     } 

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