01-需求:
1.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数;
2.然后打印出这个十进制整数对应的二进制形式。
02-思路:
1.十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位;
2.接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。
3.其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
03-代码:
1.第一种方式
package com.eleven;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
* 思路:
* 十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
*
* @author eleven
*
*/
public class ThreeDemoTest {
public static void main(String[] args) {
// 我们可以通过 Scanner 类来获取用户的输入。
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数:");
try {
// 输入一个字符串
String s = in.nextLine();
// 将字符串转换成整数类型,转成十进制整数
int num = Integer.valueOf(s);
// 创建一个ArrayList数组,存放余数
ArrayList<Integer> remainder = new ArrayList<Integer>();
// 商初始化为0
int shang = 0;
// 判断num/2的值大于0
while (num / 2 > 0) {
shang = num / 2; // 将num/2的值赋给shang
remainder.add(num % 2); // 将num%2的值添加到余数(remainder)中,能被整除的存0,不能被整除的存1
num = shang; // 将shang的值赋给num,反复执行,直到num/2的值小于2为止
}
if (num == 1)
remainder.add(1); // 当num为1时,将1添加到余数中,也就是arraylist集合里面。
System.out.println(remainder); // 此时打印出来的并不是我们想要的结果[0, 0, 1, 0, 1, 1, 1, 1, 1]
System.out.println(remainder.size()); // 9
// 根据remainder的长度进行减的操作,将值依次打印出来,就是将余数里面的值倒序打印出来。
for (int i = remainder.size() - 1; i >= 0; i--) {
System.out.print(remainder.get(i)); // 500的二进制是111110100
}
// 如不知道异常的类型,可以使用Exception,由于Exception是所有异常的父类,所以可以直接抛出任何类型的异常,再打印异常栈信息就可以得知是什么类型异常
} catch (NumberFormatException e) { // 这里的异常类型是数字转换异常,所以使用NumberFormatException
e.printStackTrace(); // 打印异常栈信息!!
}
}
}
2.第二种方式
如果只需要单纯的输出二进制,可以调用Integer提供的api。
package com.eleven.test;
import java.util.Scanner;
public class ThreeDemoTestYH {
public static void main(String[] args) {
// 01|简单写法
int a = 500;
String b = Integer.toBinaryString(a);
System.out.println(b);
// 02|直接调用Integer提供的API中的方法toBinaryString()
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数:");
Integer x = in.nextInt();
String y = Integer.toBinaryString(x);
in.close();
System.out.println(y);
}
}