我有整数a,b,c,d。我想设计一个程序,在丢弃最高和最低数字后输出数字的平均值。所以如果我输入3 7 5 3,我会想要输出4.我必须这样做而不使用数学库,循环或数组。我的代码如下。它运行但输出错误。我做错了什么?
public class average{
public static void main(String[] args) {
int a, b, c, d;
a = Integer.valueOf(args[0]);
b = Integer.valueOf(args[1]);
c = Integer.valueOf(args[2]);
d = Integer.valueOf(args[3]);
if ((a>b)&&(a>c)&&(a>d))
{a= 0;
}
if ((a<b)&&(a<c)&&(a<d))
{a= 0;
}
if ((b>a)&&(b>c)&&(b>d))
{b=0;
}
if ((b<a)&&(b<c)&&(b<d))
{b=0;
}
if ((c>a)&&(c>b)&&(c>d))
{c=0;
}
if ((c<a)&&(c<b)&&(c<d))
{c=0;
}
if ((d>a)&&(d>b)&&(d>c))
{d=0;
}
if ((d<a)&&(d<b)&&(d<c))
{d=0;
}
int x;
// x is the average of all the numbers excluding the largest and the smallest
x= ((a+b+c+d)/2);
System.out.println(x);
}
}
答案 0 :(得分:2)
3 3 5 7,a和b相等。但是你的代码只比较小于(&lt;)的值,所以当你的代码执行到达行“x =((a + b + c + d)/ 2);”你有一个= 3,b = 3和c = 5,结果为x = 5.
希望这能解释为什么你没有得到预期的结果。
答案 1 :(得分:1)
当两个或多个数字相同时,您提供的if条件无法正常工作,Rai已清楚解释。
您可以将最小值和最大值存储在最小和最大变量中。
int min = a, max = a;
if(b > max)
{
max = b;
}
if(c > max)
{
max = c;
}
if(d > max)
{
max = d;
}
同样适用于最小。
当您将平均数字相加时,只需添加所有四个数字并减去最小值和最大值之和。
我希望它足够清楚。
答案 2 :(得分:0)
快速简短的解决方案,没有循环,没有使用数组和数学库:
public static void main(String[] args) {
args = new String[] {"3", "7", "5", "3"};
int a = Integer.valueOf(args[0]);
int b = Integer.valueOf(args[1]);
int c = Integer.valueOf(args[2]);
int d = Integer.valueOf(args[3]);
List<Integer> numbers = new ArrayList<>();
numbers.add(a);
numbers.add(b);
numbers.add(c);
numbers.add(d);
Integer min = numbers.stream().min(Integer::compare).get();
Integer max = numbers.stream().max(Integer::compare).get();
numbers.remove(min);
numbers.remove(max);
int average = (numbers.get(0) + numbers.get(1)) / 2;
System.out.println("average: " + average);
}