问题解析
这道题一共两个难点:
-
如何让数列能够按从高位到低位正序排列?
在上篇笔记中,我从输入数的二进制序列第 1 位一直遍历到第 32 位,若这道题也使用这个顺序,得到的会是逆序的奇数列和偶数列。因此我们换个方向进行遍历即可,从二进制序列的第 32 位遍历到第 1 位,得到即为正序数列。 -
如何同时打印奇数列和偶数列?
在这个问题上我耗费了不会时间,一直试图在一个循环里把奇数列和偶数列都排列出来。后来发现,只要拆解成两个循环,这个问题就很好解决,不必太钻牛角尖。
解题思路
创建 n 变量储存输入数,然后由两个循环分别由高位到低位遍历输入数的二进制序列。奇数列从 n >> 31 一直遍历到 n >> 1 并将每一位都输出,需要注意 println 是带换行符的输出,为了让数列保持在同一行,要换用 print 来输出,循环结束后再加一个换行语句,开启下一条偶数列循环。偶数列由 n >> 30 遍历到 n >> 0 并将每一位都输出,就能得到偶数列。
实现代码
public static void main(String[] args) {
System.out.println("请输入一个整数: ");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
//打印奇数
System.out.println("奇数是:");
for(int i = 31; i >= 1; i -= 2){
System.out.print(((n>>i)&1) + " ");
}
System.out.println();
//打印偶数
System.out.println("偶数是:");
for(int i = 30; i >= 0; i -= 2){
System.out.print(((n>>i)&1) + " ");
}
}