求任意两个int型数的平均数
应当考虑到两个数如果先进行相加再除以2时,相加后的值可能会超过int型值的范围,导致运算结果出错
解决:
1.让两个数进行异或运算,是否(a^b=0),如果是则两数相等,平均数为其中任意一个,即avg=a或avg=b。否则进入2
2.是否(a^b>0),如果是则两个数同号,判断它们的正负,分别求平均值
(1)如果都为正值,判断a、b的大小,avg=min+(max-min)/2
(2)如果都为负值,判断a、b的大小,avg=max+(min-max)/2
否则进入3
3.是否(a^b<0),如果是则两个数异号,相加不可能使其超过int型的数值范围,直接相加除2得到平均值,avg=(a+b)/2
具体代码如下:
package testSimple;
import java.util.Scanner;
public class TestAverage {
static Scanner sc=new Scanner(System.in);
private static int a;
private static int b;
public static void average() {
System.out.println("请输入a的值");
a=sc.nextInt();
System.out.println("请输入b的值");
b=sc.nextInt();
int max,min;
double avg;
System.out.println(a^b);
//使用异或判断是否相等,大于0表示同号
if((a^b)==0) avg=a;
//使用异或判断是否同号,大于0表示同号
else if((a^b)>0) {
//a、b大于0
if(a>0) {
if(a>b) {
max=a;
min=b;
}
else {
max=b;
min=a;
}
avg=min+(max-min)/2;
}
//a、b小于0
else {
if(a>b) {
max=a;
min=b;
}
else {
max=b;
min=a;
}
avg=max+(min-max)/2;
}
}
//异号,两个int类型的值相加不可能超过int值的范围
else avg=(a+b)/2;
System.out.println("a和b的平均值为:"+avg);
}
public static void main(String[] args) {
TestAverage.average();
}
}