得到错误的输出?我的编码可能会关闭?

时间:2015-01-29 20:19:41

标签: java

好吧,我正在做练习问题(准备中期)并且我能够正确地获得其中一个输出。但是,我很难获得平均输入。最终结果是12.0而不是6.5

这是提示问题:5。

  

通过填写函数sum(),avg()和ord()的主体来完成以下Java程序。对sum(n)的调用应该返回从1到n的所有整数之和,而avg(n)返回同一组数字的平均值。如果x<对布尔函数ord(x,y,z)的调用返回true。 Y'LT; z,否则为false。 Function main()应该产生以下输出

     

输出:

     

6.5 true false

这是我的代码:

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 int sum(int)static double avg(int)的代码。

2 个答案:

答案 0 :(得分:1)

此:

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

将跳过n。 (它将在1 ... n-1上循环)。对于12,总和将为11*12/2,然后除以12,结果为11/2 = 6.5

修复如下:

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

替换整个循环

我认为您的老师希望您了解可重用性,并且由于sumavg中的2个循环相同,您可以写一下:

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

答案 1 :(得分: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;
}