好吧,我正在做练习问题(准备中期)并且我能够正确地获得其中一个输出。但是,我很难获得平均输入。最终结果是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)
的代码。
答案 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
我认为您的老师希望您了解可重用性,并且由于sum
和avg
中的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;
}