一个程序,用于查找多个整数的平均值

时间:2017-09-28 22:46:35

标签: java

我有整数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);
 }
}

3 个答案:

答案 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);
}