2015-02-01 1 views
-1

Не удалось создать цикл while, который продолжает считывать входные значения пользователей, пока не будет введено значение 0. Затем среднее значение всех значений будет вычисляться и печататься в конце. Вот часть моего кодирования, но это неверно. Просто покажу вам, как я воспринимаю проблему.Java while цикл до тех пор, пока пользователь не вводит значение 0

BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
String inputValues; 

int sum = 0; 
double average; 

inputValues = input.readLine(); 
String[] intValues = inputValues.split("\\s+"); 


// This is incorrect but this is the idea I am looking for 
while(intValues != 0) {  
    sum += Integer.parseInt(intValues[i]); 
} 

// Here the average is calculated as a double, and printed below. 
average = Double.parseDouble(sum/intValues.length); 
System.out.print(average); 
+0

Как вы упомянули проблема в этой линии: в то время как (! IntValues ​​= 0) {Почему ваш вход должен быть массив? Можете ли вы также добавить пример ввода, ожидаемый от пользователя? –

+0

Он не компилируется ... 'while (intValues! = 0)' должен скорее всего быть 'while (inputValues! = 0)'. Кроме того, '' parseDouble' не может применяться к 'int'. И кто такой «я»? Что с вашим кодом? Вы проверили это? – Dici

+0

@ Dici Пожалуйста, проверьте код, который он вклеил, уже имеет комментарий выше цикла while, что код неверен. –

ответ

1

Возможно, вы захотите попробовать Scanner здесь.

Scanner scanner = new Scanner(System.in); 
while(scanner.hasNextInt()) { 
    int num = scanner.nextInt(); 
    if (num == 0) 
    break; 

    sum += num; 
    count += 1; 
} 

System.out.println("Average: " + sum/count); 

Для BufferedReader случая:

int i = 0; 
while(intValues[i] != 0) {// assuming all the number were entered in one line with space as delimiter  
    sum += Integer.parseInt(intValues[i++]); 
} 

System.out.println("Average: " + sum/intValues.length); 
+0

Специально пытаюсь использовать BufferedReader по какой-то причине. –

0

Вы могли бы начать с помощью Scanner класс, который позволит вам обрабатывать входные данные, например ...

Scanner input = new Scanner(System.in); 
int sum = 0; 
boolean exit = false; 
do { 
    String input = scanner.nextLine(); 
    Scanner check = new Scanner(input); 
    if (check.hasNextInt()) { 
     int value = check.nextInt(); 
     if (value == 0) { 
      exit = true; 
     } else { 
      sum += value; 
     } 
    } 
} while (!exit); 

hasNextInt Избегает возможное исключение, которое генерирует Integer.parseInt, если вы попытаетесь разобрать не-числовое значение.

Вы можете также использовать while (check.hasNextInt()) {... в цикле нескольких входных значений из одной строки ввода ...

Вы можете проверить документацию для Scanner here

Если вы хотите продолжить работу с BufferedReader, вы могли бы использовать некоторые гордеолум логики ...

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

int sum = 0; 
int count = 0; 
double average; 

try { 
    boolean exit = false; 
    do { 
     System.out.print(">> "); 
     String inputValues = input.readLine(); 
     String[] intValues = inputValues.split("\\s+"); 
     for (String value : intValues) { 
      if ("0".equals(value.trim())) { 
       exit = true; 
       break; 
      } else { 
       count++; 
       System.out.println(value); 
       sum += Integer.parseInt(value); 
      } 
     } 
    } while (!exit); 

    System.out.println(sum + "/" + count); 
    average = (double) sum/(double) count; 
    System.out.print(average); 
} catch (IOException exp) { 
    exp.printStackTrace(); 
} catch (NumberFormatException exp) { 
    exp.printStackTrace(); 
} 
0

Попробуйте

Boolean flag=true; 
int counte=0; 
while(flag) 
{ 
      inputValues = input.readLine(); 
      if(Integer.parseInt(inputValues)==0) 
      { 
       flag=false; 
       continue; 
      } 
     counter++; // used to take avarage 
     sum+=Integer.parseInt(inputValues); 
} 

И после цикла завершения расчета насчитайте

+0

Вам нужно будет отследить счетчик, чтобы вычислить среднее значение. – user949300

+0

'Boolean' немного чрезмерен, и вы, как правило, хотите закончить цикл сразу, поэтому' do-while' будет более подходящим циклом - просто говоря ... – MadProgrammer

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