2013-11-12 2 views
0

У меня есть задание на программирование, которое просит меня ввести 10 (или меньше) целых чисел пользователя и поместить их в массив, затем взять среднее из них и вывести его. Если они вводят период, программа должна прекратить запрашивать целые числа и выполнять усреднение.Почему цикл for for выполняется более одного раза за каждый раз, когда вводится значение?

Моя проблема заключается в том, что всякий раз, когда пользователь вводит целое число, цикл for выполняется более одного раза.

Мой код ниже. Есть какие нибудь идеи как это починить?

int[] intArr = new int[10]; 

    int entered; 

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

    for(entered = 0; entered < 10; entered++){ 
     System.out.println("Please enter an integer: "); 

     int input = br.read(); 

     if(input == '.') break; 

     else{ 
      intArr[entered] = input; 
     } 
    } 

    int total = 0; 
    for(int i : intArr){ 
     total += i; 
    } 

    System.out.println("Average: " + total/entered); 
    System.out.println("Entered: " + entered); 
+0

Вероятно, 'br.read()' читает нажатие клавиши ввода. – MasterOfBinary

+0

'input == '.'' input - это int, а не' char', использовать 'readLine()' – nachokk

+0

Хорошо. Я переключил его на readLine(), но теперь, как я прочитал это как символ? Я не могу бросить его. – Daniel

ответ

0

Используйте String input = br.readLine(), чтобы прочитать целую строку.

Чтобы проверить наличие ".", используйте if (input.equals(".")) { ... }. (проверить this, если вы хотите знать, почему вы должны использовать .equals() вместо == для струнных)

Наконец, чтобы преобразовать свой вклад в целое, см here.

+0

Yup, я знаю о equals(); Андрей помог мне решить эту проблему. В любом случае, я буду отмечать это как свой ответ. Благодаря! – Daniel

0
for (entered = 0; entered < 10; entered++) { 
    System.out.println("Please enter an integer: "); 
    String str = br.readLine(); 
    if (".".equals(str)) { 
     break; 
    } 
    int input = Integer.valueOf(str); 
    intArr[entered] = input; 
} 
+0

P.S. Не забывайте обращаться с заброшенными исключениями – Stanley

+0

Спасибо! Я добавил попытку поймать мой код. Первоначально я просто бросил его. – Daniel

0

Ok Его Really Simple Сначала позвольте мне объяснить вам, почему Его Случается Ok чтения() функция считывает первый символ входного значения и остаток строки сохраняется в буфере поэтому, когда вы вводите любое целое число например: 1 1 хранится в переменной и '\ n'which по умолчанию добавляет значение входного значения в буфер , поэтому в следующей итерации цикла он считывает символ' \ n 'из буфера в качестве входного значения и переходит к следующей итерации

ПРИМЕР 2: Если в вашей программе мы вводим ввод как 12 Он пропускает две итерации Coz Firstly It Stores 1 At the Time Of Input В следующей итерации Он принимает значение 2 предыдущего входа в качестве входных данных за это время В дальнейшем Next Iteration It Takes ' \ п» , а затем переходит к следующей итерации, при которой их не осталось символов в памяти, поэтому он просит вас ввести

Примечание ::: чтения() возвращают символ, так что даже если пользователь вводит 5, а расчет ASCII код Из 10 будет использовано то, что 53 не одна создает проблемы

FIX :::

int[] intArr = new int[10]; 
int entered; 
BufferedReader br = new BufferedReader(new InputStreamReader(System. in)); 
for (entered = 0; entered < 10; entered++) { 
    System.out.println("Please enter an integer: "); 

    String input = br.readLine(); 

    if (input.equals(".")) { 
     break; 
    } else { 
     intArr[entered] = Integer.parseInt(input); 
    } 
} 
int total = 0; 
for (int i: intArr) { 
    total += i; 
} 
System.out.println("Average: " + total/entered); 
System.out.println("Entered: " + entered); 
Смежные вопросы