2012-01-07 3 views
1

Используя цикл, я хочу рассчитать среднее значение n чисел в Java и когда пользователь вводит 0, цикл заканчивается. Вот код, который я написал:Среднее число n чисел в java

public class start { 
    public static void main(String[] args) { 
     System.out.println("Enter an int value, the program exits if the input is 0"); 
     Scanner input = new Scanner (System.in); 
     int h = 0; 
     while (input.nextInt() == 0){ 
      int inp = input.nextInt(); 
      int j = inp; 
      int i = 0; 
      h = j + i; 
      break; 
     } 

     System.out.println("The total is: "+ h); 
    } 
} 

Могу ли я сделать любую логическую ошибку?

+0

+1 для усилий! – Venki

+0

Попробуйте проследить программу с действительными числами. Затем попробуйте запустить программу с реальными числами. Похоже, вы этого не сделали. –

+0

Если вы используете отладчик для ввода кода, вы сможете увидеть, что делает каждая строка кода и понимает вашу программу. Когда программа ведет себя так, как вы этого не ожидаете, это дает вам подсказку о том, что вам нужно изменить, чтобы исправить это. BTW: Я бы назвал свою полную переменную 'total', и я бы использовал тип' long', чтобы избежать переполнения/переполнения. –

ответ

1

«Я делаю логическую ошибку?»

Да. Это похоже на проблему с домашней работой, поэтому я не буду излагать это для вас, но подумайте о том, что такое значение i, и что означает h = j + i в этом случае.

Вам также необходимо быть осторожным при звонке input.nextInt(). Что произойдет, если вы вызовете это дважды каждый раз через цикл (что вы делаете)?

1

Домашнее задание, не так ли?

Вызов input.nextInt() в состоянии цикла while, а также для заполнения int inp означает, что каждое прохождение через цикл считывает два числа (один из которых игнорируется). Вам нужно выяснить, как читать только одно число за итерацию цикла и использовать его как для сравнения == 0, так и для inp.

Кроме того, вы сделали правильную вещь с h вне цикла while, но я думаю, вы сбиваете с толку и i внутри цикла. Вы можете рассмотреть несколько более описательные имена, что значительно упростит ваш код.

0

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

0

редактировал время цикла:

while(true){ 
    int e=input.nextInt(); 
    if(e==0) break; 
    h+=e; 
    numberOfItems++; 
} 

Ваша оригинальная реализация под названием nextInt() дважды, который имеет эффект отбрасывания любой другой номер (который, безусловно, не то, что вы намеревались сделать).

1
  • Не называть сумму h, а суммой.
  • Неправильное состояние
  • Почему вы используете inp и j и i?
  • Существует безусловный перерыв - почему?
  • Вы говорите о среднем. Вы знаете, что такое среднее?
  • Ваше выходное сообщение не о среднем - это о сумме.
0

Предполагая, что вы просите пользователя только один раз, введите и если число, если нуль, вы просто хотите отобразить среднее значение. вам нужна переменная, объявленная вне цикла while, которая будет продолжать добавлять разные числа, введенные пользователем, а также вторую переменную, которая отслеживает количество случаев, введенных пользователем, и продолжает увеличивать себя на единицу, пока число не будет равно нулю, как было введено пользователь. И по мере того, как пользователь вводит 0, цикл прерывается, и здесь отображается наше Среднее значение.

import java.util.Scanner; 

public class LoopAverage 
{ 
    public static void main(String[] args0) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter any Integer value : "); 
     int value = -1, sum = 0, count = 0; 
     while((value = scan.nextInt()) != 0) 
     { 
     count++; 
     sum = sum + value; 
     } 
     System.out.println("Average : " + (sum/count)); 
    } 
} 

Надежда, что может помочь,

С уважением

0

да, куча логических ошибок.

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

Некоторых других вещей, чтобы рассмотреть следующие вопросы:

  • Убедитесь, чтобы проверить деление на 0
  • Если вы целочисленное деление, то в конечном итоге с некорректным средним , как это будет округлый. Лучше всего, чтобы бросить либо делитель или дивиденда поплавка
  • имена переменных должны быть полезными, попасть в привычку использовать их
0

Я рекомендую вам обратиться к состоянию «а» цикл: если условие отвечает, что бы сделала программа? (Если вы знаете немного VB, в чем разница между do ... до ... и do ... while ...?)

Также, когда вы вызываете scanner.nextInt(), что делает ли программа? Для каждого входа, как вы его называете?

И последнее, что не менее важно, когда следует использовать «перерыв» или «продолжить»?

Для основы, если вы находитесь в курсе, рекомендуем вам ознакомиться с примечаниями. Или вы можете найти хорошие книги, объясняющие детали Java. например Мышление в Java

Наслаждайтесь изучением Java.

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