2013-10-06 7 views
0

Я пытаюсь попросить пользователя ввести любое количество чисел до 5, каждое число разделено пробелом.Чтение пользовательского ввода

, например

входят до 5 номеров: 3 4 5

Я собираюсь добавить их в целой сумме, а потом разделить их на прилавок

в получить среднее из этих чисел.

Однако моя петля, похоже, не заканчивается. Что случилось с моим кодом?

int counter = 0 , sum = 0; 

    Scanner scan = new Scanner(System.in); 

    System.out.println("enter up to 5 numbers"); 

    while(scan.hasNextInt());{ 
    counter++; 
    sum += scan.nextInt(); 
    } 
    System.out.println(counter); 
    System.out.println(sum); 

ответ

1

Вы кладете ; между while и {, поэтому петли. Убери это.

+0

Это еще не конец, если я/п в консоли. – Flow

+0

@Flow Прошу прощения, до вас, что в консоли? –

0

Scanner.hasNextInt() не делает то, что вы, кажется, думаете. Он не говорит вам, есть ли целое число, доступное в уже введенном вводе (у него нет понятия о том, что было «введено»), а скорее о том, может ли входное ожидание считываться как целое число. Если вход уже отсутствует, он будет блокироваться до тех пор, пока не будет, поэтому ваш цикл просто сидит там навсегда, блокируя больше ввода.

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

String input = scan.nextLine(); 
for(String part : input.split(" ")) 
    sum += Integer.parseInt(part); 

Ответ Сержа Середенко также верен, но это еще одна проблема.

+0

'hasNextInt()' blocks? Вы в этом уверены? Тогда в чем его смысл? –

+0

Суть его в том, чтобы проверить, может ли предстоящий вход обрабатываться как целое, или если это что-то еще, например текст. – Dolda2000

0

Все в вашем коде прекрасно, за исключением точки с запятой (;) сразу после цикла while, конечно, это приведет к бесконечному циклу.

0
int counter = 0 , sum = 0; 

Scanner scan = new Scanner(System.in); 

System.out.println("enter up to 5 numbers"); 

while(scan.hasNextInt()){ 
    counter++; 
    sum += scan.nextInt(); 
    if(counter >=5) 
     break; 
} 
System.out.println(counter); 
System.out.println(sum); 
scan.close(); 

Во-первых, вам нужно удалить ';' расположенных после while(scan.hasNextInt()) и до {; Для ; означает, что инструкция while завершена. Во-вторых, когда вы используете свой код, вам нужно CTRL + Z, чтобы в конечном итоге внести свой вклад. При добавлении

if(counter >=5) 
    break; 

Ваш ввод будет завершен при вводе 5 номеров.

+0

Это работает, но что, если пользователь поставил 4 числа вместо 5? – Flow

0

Если вы хотите прочитать целую строку и затем выполнить арифметическую операцию позже, вам не нужно иметь цикл while с методом hasNextInt().

Я бы предложил вам прочитать строку, затем разбить по пробелу и перебрать массив строк. Проверьте фрагмент кода.

package com.gaurangjadia.code.java; 

import java.util.Scanner; 

public class SO19204901 { 

    public static void main(String[] args) { 
     int counter = 0, 
       sum = 0; 

     System.out.println("enter up to 5 numbers"); 

     Scanner scan = new Scanner(System.in); 

     String strInput = scan.nextLine(); 

     String[] arrayNumbers = strInput.split(" "); 

     for (int i = 0; i < arrayNumbers.length; i++) { 
      int n; 

      try { 
       n = Integer.parseInt(arrayNumbers[i]); 
      } 
      catch (NumberFormatException e) { 
       n = 0; 
      } 

      sum = sum + n; 
      counter++; 
     } 

     System.out.println(sum); 

    } 

} 
0
DataInputStream in = new DataInputStream(System.in); 
    String[]label = {"quiz #","Total","Average"}; 
    int counter = 0; 
    int theSum = 0; 

    System.out.print("Enter up to 5 number : "); 
    String[]tempNum = in.readLine().trim().split("\\s+"); 
    System.out.println(); 

while (counter <= tempNum.length) 
{ 
    if (counter == tempNum.length) 
    { 
    System.out.printf("%10s %12s\n",label[1],label[2]); 
    counter = 0; 
    break; 
    } else { 
    System.out.printf("%10s",label[0] + (counter+1)); 
    } 
    counter++; 
} 

while(counter <= tempNum.length) 
{ 
    if (counter == tempNum.length) 
    {System.out.printf("%10d %10.2f\n",theSum,(double)(theSum/counter)); 
    } else 
    {System.out.printf("%10d",Integer.valueOf(tempNum[counter])); 
    theSum += Integer.valueOf(tempNum[counter]); 
    } 
    counter++; 
} 
Смежные вопросы