Java小白踩坑录 - 初级、中级和高级程序员之间,究竟有哪些差异?

本文通过三个不同层次的方法展示了如何在Java中判断一个整数是否为奇数,从小白的简单求余法,到小王考虑正负整数的求余不等于0法,再到扫地僧利用二进制位运算的高效判断法,层层深入,揭示了编程思维的进阶之路。

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

 

ROUND 1

public class TestOdd {
 public static void main(String[] args) {
 int oddNum=153;
 System.out.println(isOdd(oddNum));
 int evenNum=9284;
 System.out.println(isOdd(evenNum));
 }
 public static boolean isOdd(int i){
 return i % 2 == 1;
 }
}

小白:奇数(odd)指不能被 2 整除的数 ,数学表达形式为:2k+1,因此我就写了一个方法,根据求余之后的值是否为 1 来判断。

接下来轮到小王的程序了。

ROUND 2

public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 
 public static boolean isOdd(int i){
 return i % 2!=0;//如果一个数是偶数,就算是负数整除2余数也为0
 }
}

小王:因为 int 的整数范围为 -2^{31}−231 ~2^{31}-1231−1 ,即在所有的 int 数值中,有一半都是负数,如果 i 为负数,所有的求余都是负数,不会等于 1,例如 i=-5,i%2=-1。所以考虑正负整数的情况下,i 需要满足求余不等于 0。

接下来轮到扫地僧的程序了。

ROUND 3

public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 
 public static boolean isOdd(int i){
 return (i & 1)!=0;//1的十六进制为0x00000001,本质是取二进制的最后一位的值
 }
}

扫地僧:不管 int 的数据是怎么样子的,它在计算机里都是二进制表示,想要判断是否为 0,根据二进制的特点 (2^n2n+…+2^020 ),只需要看看二进制的 最后一位 是 1, 还是 0 即可,最快的办法就是使用 & 提取二进制的最低位来判断。

尾声

经过这次事件后,对小白的触发挺大的。虽然上面的程序不能完全说清楚就是初级、中级和高级的区分,但至少从思路上来说,初级、中级、高级的区分还是很明显的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆克和他的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值