2014-10-01 4 views
-2

Когда мы вводим 0 в программу, он должен прекратить выполнение цикла и распечатать среднее число. Когда я запускаю программу и изначально вводю 0, программа завершает работу. Если я вхожу в целое число, которое сначала не равно нулю, а затем введите 0, программа продолжает работать, и я не могу завершить работу. Я считаю, что целочисленное значение необходимо обновить, когда пользователь вводит новое значение для выхода программы, и сумма будет правильной.Как обновить целое число во время цикла?

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

import java.util.Scanner; 

public class Exercise05_01 { 

    public static void main(String[] args){ 

     float negCount = 0; 

     float sum = 0; 

     float posCount = 0; 

     Scanner input = new Scanner(System.in); 

     System.out.println("Enter a positive or negative integer. Entering 0 ends program"); 

     int integer = input.nextInt(); 

     while (integer != 0) { 
      if (integer > 0) { 
       posCount = +1; 
       sum = +integer; 
      } 
      if (integer < 0) { 
       negCount = +1; 
       sum = +integer; 
      } 

      float count = negCount + posCount; 

      if (integer == 0) { 
       System.out.println("The answer"); 
      } 
     } 
    } 
} 
+0

Вам необходимо запросить ввод изнутри цикла. Кроме того, эти присвоения 'posCount',' negCount' и 'sum' не делают то, что вы думаете, это –

+0

Возможно, вам следует выйти из цикла while, используя break – Ruben

+0

Странно, я не могу отредактировать этот вопрос, чтобы отформатировать текст. ... – ProfessionalAmateur

ответ

1

Я думаю, вам нужно добавить строку, которая вводится в ваш цикл while.

while (integer != 0) { 
     integer = input.nextInt(); 
      . 
      . 
      . 

Этот способ, пока цикл работает, на каждой итерации он будет проверять вход еще.

Кроме того, я должен сказать, что это выглядит подозрительно, как домашнее задание ... особенно имя класса ...

2

Есть две проблемы.

Во-первых, вы не получаете никакого ввода, пока находитесь в цикле. Это можно исправить с предложением, предоставленным ранее Lunchbox.

Во-вторых, это не накапливая значение:

posCount = +1; 

Это присваивающий положительный 1 до posCount каждый раз.

Вы хотите либо увеличить значение ...

posCount++; 

... или добавить в явном виде.

posCount += 1; 
1

Как Lunchbox точки в своем ответе, вы должны запросить ввод от пользователя из внутри цикла, в противном случае integer никогда не меняется, и вы никогда не выйдете из цикла; поведение, которое вы наблюдаете, - это программа, работающая вечно.

Лучший способ сделать это предложение Закуски в:

int integer = input.nextInt(); 
while(integer != 0){ 
    // Do stuff 
    integer = input.nextInt(); 
} 

Тем не менее, есть много других проблем с вашим кодом. Во-первых, почему вы используете float s для хранения ваших счетчиков и сумм? Почему бы не использовать int?

Для другого вы никогда не увеличиваете эти значения. Как указывает Makoto, его ответ posCount = +1 не является оператором инкремента.

В этом случае оператором + является unary plus operator. Что это будет делать, так это заставить ваше подписанное значение быть положительным, поэтому +(-1) == 1. Хотя это полезно, это не то, что вы хотите, и это определенно не то, что вы хотите делать со своей суммой.

Вместо этого, вы хотите, чтобы выполнить одно из следующих трех вещей:

posCount = posCount + 1; 
posCount += 1; 
posCount++; 

Это все эквивалентные высказывания. Оператор ++ является оператором приращения постфикса, который добавит 1 к значению переменной, а затем вернет его (это немного сложнее, чем это, но вы можете прочитать это в свое время). Поэтому не используйте этот синтаксис для вашей суммы; используйте один из двух других.

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