2015-01-29 2 views
-1

Ну, я занимаюсь практикой (готовясь к среднесрочной перспективе), и я смог получить один из выходов правильно. Тем не менее, я затрудняюсь получить средний вклад. Он заканчивается на 12.0 вместо 6.5Получение неправильного вывода? Мое кодирование, возможно, выключено?

Вот оперативный вопрос: 5.

Заполните следующую программу Java, заполнив тела функций sum(), avg() и ord(). Вызов sum (n) должен возвращать сумму всех целых чисел от 1 до n, а avg (n) возвращает среднее значение того же набора чисел. Вызов булевой функции ord (x, y, z) возвращает true, если x < y < z и false в противном случае. Функция Main() должен произвести следующий вывод

Выход:

6,5 верно неверно

Это мой код:

class Problem5 { 
    // sum(): return 1+2+3+..+n 
    static int sum(int n) { //this is given 
     int sum = 0; 
     for(int i=0; i<n; i++) { 
      sum += n; 
     } 
     return n; 
    } 

    // avg(): return average of {1,2,..,n} 
    static double avg(int n) { // given 
     double sum = 0; 
     for (int i=1; i<n; i++) { 
      sum +=n; 
     } 
     return sum/n; 
    } 

    //ord(): return true if and only if x<y<z 
    static boolean ord(double x, double y, double z){ //given 
     if (x < y && y <z){ 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public static void main (String[]args) { 
     System.out.println(avg(12)); 
     System.out.println(ord(1.2,3.4,5.6)); 
     System.out.println(ord(3.4,1.2,5.6)); 
    } 
} 

В целом у меня возникли проблемы кодирования/заполнения код для и static double avg(int).

+0

это не скомпилируется, так как 'sum' не объявляется в' avg'. – njzk2

+0

В вашем отступе есть много чего ... – DaaaahWhoosh

+1

Быстрее было бы «возвращать n * (n + 1)/2', но я думаю, что цель состоит в том, чтобы понимать кодировку, а не математику ... ;-) – Axel

ответ

1

В этом:

for (int i=1; i<n; i++){ 

Пропустить n. (он будет зацикливаться на 1 ... n-1). Для 12, сумма будет 11*12/2, который затем разделить на 12, в результате 11/2 = 6,5

Fix это как так:

for (int i = 1; i <= n; i++) { 

(или заменить весь цикл по return (double) (n+1)/2.0)

Для вашей функции sum есть та же ошибка, плюс возвращаемое значение не является хорошим:

return n; 

Должно быть

return sum; 

И приращение должно быть sum += i;, не n (вы хотите 1 + 2 + 3 + 4 ..., а не 12 + 12 + 12 + 12 ...)

Опять же, вы можете заменить весь цикл по return n * (n + 1)/2

Я полагаю, что учитель будет ожидать вас, чтобы узнать о повторной практичности, и так как ваши 2 петли в sum и в avg идентичны, вы могли бы написать:

public static double avg(int n) { 
    return (double) sum(n)/n; 
} 
+0

Спасибо! Это имело для меня много смысла. Спасибо, что указали мои ошибки и объяснили. – intropella

0

Сумма просто добавление всех чисел в определенном диапазоне:

static int sum(int n) { 
    int total = 0; 

    for(int i = 1; i <= n; i++) { 
     total += i; 
    } 

    return total; 
} 

Ср просто сумма диапазона делится на количество чисел:

static double avg(int n) { 
    return sum(n)/(double) n; 
} 
+1

«total + = 1;» цикл бесценен – njzk2

+0

Я программист на Python, по профессии, просто шучу, что я в старшей школе. Но почему downvotes, код работает нормально? –

+0

это работает, но у меня глаза кровоточат (вы правы, хотя это не требует нисходящего потока. Извините.) – njzk2

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