java 平均值_Java求两个数平均值

本文介绍了在Java中如何避免整数溢出的问题来正确地计算两个整数的平均值,并提供了几种有效的方法。同时,文中还涉及了求最大值、百分比及最大公约数等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何正确的求2个数的平均值。在练习算法二分查找的时候发现的,以前没有注意到的bug

备注:数据以int类型为例

一、以前的通用写法

/**

* 求a+b平均值

* @param a

* @param b

* @return a+b的平均值

*/

static int avg(int a ,int b){

return (a+b)/2;

}

请记住:这是一个有bug的写法,因为两个数相加有可能超过了int的范围,但是他们的平均值肯定不会超过范围。以前没有注意到这个问题,知道深入了解了位运算。

二、正确写法

/**

* 求a+b平均值

* @param a

* @param b

* @return a+b的平均值

*/

static int avg(int a ,int b){

double random = Math.random();

if (random >= 0 && random <= 0.25){

//正确写法1

return ((a&b) + ((a^b) >> 1));

}else if (random > 0.25 && random <= 0.5){

//正确写法2

return b+(a-b)/2;

}else if (random > 0.5 && random <= 0.75){

//正确写法3

return b+((a-b)>>1);

}else if (random > 0.75 && random <= 1.0){

//正确写法4

return (a+b)>>>1;

}else {

return -1;

}

}

java求两个数中的大数

java求两个数中的大数 java中的max函数在Math中 应用如下: int a=34: int b=45: int ans=Math.max(34,45); 那么ans的值就是45.

java 求 两个数的百分比&percnt; (转)

int num1 = 7; int num2 = 9; // 创建一个数值格式化对象 NumberFormat numberFormat = NumberFormat.getInstance(); / ...

Java 求两个数百分比&percnt;

int num1 = 500; int num2 = 312; // 创建一个数值格式化对象 NumberFormat numberFormat = NumberFormat.getInstance( ...

java求两个数百分比,精确到指定位数

// 获取百分比,不带小数点 private String getPercentage(String num, String total){ NumberFormat numberFormat = N ...

求两个数的最大公约数(Euclid算法)

求两个数 p 和 q 的最大公约数(greatest common divisor,gcd),利用性质 如果 p > q, p 和 q 的最大公约数 = q 和 (p % q)的最大公约数. 证 ...

求两个数中的较大值max&lpar;a&comma;b&rpar;。&lpar;不用if,&gt&semi;&rpar;

题目:求两个数的较大值,不能使用if.>. 1.不使用if.>,还要比较大小,貌似就只能使用条件表达式: x=?:; ...

求两个数a、b的最大公约数

//求两个数a.b的最大公约数 function gcd(a,b){ return b===0?a:gcd(b,a%b) }

c语言实践&colon;求两个数的最大公约数

我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...

【C语言】求两个数中不同的位的个数

//求两个数中不同的位的个数 #include int count_different(int a, int b) { int count = 0; int c = a ...

随机推荐

Android广播机制的深入学习

部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

jQuery基础&lowbar;2

属性:attr: 属性 , 元素.attr("属性名");获取属性attr("attr","value"): 设置属性attr({value ...

yum install 安装 下载好的rpm包 会并依赖包一起安装 zoom电话会议的安装

[root@ok-T Downloads]# rpm -ivh zoom_x86_64.rpm error: Failed dependencies: libxcb-image.so.()(64bit ...

DOM中元素节点、属性节点、文本节点

DOM中有12中节点,但最常用到的是元素节点,属性节点,文本节点. 元素节点的节点类型(nodeType)是1: 属性节点的节点类型(nodeType)是2: 文本节点的节点类型(nodeType)是 ...

POJ 1979 dfs和bfs两种解法

fengyun@fengyun-server:~/learn/acm/poj$ cat 1979.cpp #include #include

CodeForces 452C &Tab;Magic Trick &lpar;排列组合&rpar;

#include #include #include #include us ...

SQL联表查询

数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...

【最新】Power BI混合现实应用Mixed Reality app预览版正式发布

1.介绍 2018年3月13日,Power BI在官方博客和Docs文档发布了Power BI for Mixed Reality应用预览版的消息, 也就是可以以后在更虚拟的世界中来观察你的报表,想象 ...

快速搭建react项目骨架(按需加载、redux、axios、项目级目录等等)

一.前言 最近整理了一下项目骨架,顺便自定义了一个脚手架,方便日后使用.我会从头开始,步骤一步步写明白,如果还有不清楚的可以评论区留言.先大致介绍一下这个骨架,我们采用 create-react-ap ...

keras 设置GPU使用率

import tensorflow as tffrom keras.backend.tensorflow_backend import set_session config = tf.ConfigP ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值