2013-09-14 2 views
-5

Когда я запускаю этот код и вводит числа, сумма которых> 100, вывод правильный для счета и суммы, но среднее значение неверно. Например; ввод 8,10,99 ... счет равен 3, сумма равна 117 и должна возвращать среднее значение 39 ... фактический возвращаемый результат - счет 3, сумма 117 и средний 58,5. Я понял, что это происходит потому, что среднее значение выполняется с использованием счетчика 2 вместо 3 (или всегда одного меньше, чем должно быть с разными значениями). Почему это? Он отлично работает для ввода суммы < = 100. ПОЖАЛУЙСТА ПОМОГИТЕ :)Можете ли вы помочь мне исправить среднюю часть моего кода?

public static void main(String[] args) { 
    //Use Main Method for gathering input 
    float input = 1; 
    // Declare variable for sum 
    float theSum = 0; 
    // Declare variable for average 
    float average = 0; 
    // Declare variable for counting the number of user inputs 
    int counter = 0; 
    /* Initialize the while loop using an input of 0 as a sentinel value 
    * to exit the loop*/ 
    while (input != 0) { 
     // Use JOptionPane method to accept input from user 
     input = Float.parseFloat(
       JOptionPane.showInputDialog(
       null, "Please enter a number. Enter 0 to quit: ")); 
     // Invoke sum method and pass input and summation to sum method 
     theSum = (sum(input, theSum)); 
     // Invoke avg method and pass summation and counter to avg 
     average = (avg(theSum, counter)); 
     // Increment the counter variable 
     counter++; 

     if (theSum > 100) 
     { 
      JOptionPane.showMessageDialog(null, "The sum of your numbers " 
        + "are greater than 100!"); 
      break; 
     } 
    } 
     // Invoke display method and pass summation, average, and counter variables to it 
     display(theSum, average, counter); 
    } 


public static float sum(float num1, float sum) { 
    //Add the user's input number to the sum variable 
    sum += num1; 
    //Return value of sum variable as new summation variable 
    return sum; 
} 

public static float avg(float num1, int num2) { 
    //Declare and initialize variable for average 
    float average = 0; 
    //Calculate average 
    average = num1/num2; 
    //Return value of average variable 
    return average; 
} 

public static void display(float sum, float average, int counter) { 

    /* I am subtracting 1 from variable counter so as not to include the sentinel value 
    * of 0 that the user had to enter to exit the input loop in the overall count*/ 

    // Display the count, sum, and average to the user 
    if (sum > 100) { 
     JOptionPane.showMessageDialog(null, "Count = " + (counter) + ", Sum = " + sum + ", Average = " + average); 
    } 
    if (sum <= 100) { 
     JOptionPane.showMessageDialog(null, "Count = " + (counter - 1) + ", Sum = " + sum + ", Average = " + average); 
    } 

} 

}

ответ

1

Вы увеличиваете счетчик после принимая среднее, поэтому вы видите ваше среднее на основе 2-х числа, а не ваши ожидается 3.

average = (avg(theSum, counter)); 
    // Increment the counter variable 
    counter++; 

Поменяйте эти два и счетчик счетчика до.

counter++; 
    // Increment the counter variable 
    average = (avg(theSum, counter)); 

Edit:

Вот что вы должны изменить:

Во-первых, обновлять счетчик только если вход не = 0

if(input!=0) 
    { 
    counter++; 
    } 

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

average = (avg(theSum, counter)); 
    display(theSum, average, counter); 

В-третьих, удалить counter-1 из display метода и печати counter

public static void display(float sum, float average, int counter) { 
JOptionPane.showMessageDialog(null, "Count = " + (counter) + ", Sum = " + sum + ", Average = " + average); 
} 

После этого, он работает в обоих случаях, как вы ожидаете

+0

Спасибо !!!!! Я собираюсь CRAZY !!! Работали, как шарм, ты лучший :) – Chris

+0

BUUUUTTTT, теперь среднее значение ввода с суммой <= 100 неверно ... любые идеи? – Chris

+0

Скажите, например? –

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