求任意两个int型数的平均值

求任意两个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();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值