/*
9、 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其
中包含有非数字字符的情况。
提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,
这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,
得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
*/
package com.itheima;
import java.lang.StringBuffer;
import java.util.Scanner;
public class Test_09 {
public static String stringToBinaryArr(String numStr) {
StringBuffer strBuf = new StringBuffer();
if(isToLarge(numStr)) {
strBuf.append("该数字超出了整数接收范围。");
return strBuf.toString();
}
if(includeIlligleChar(numStr)) {
strBuf.append("该数字有非法字符。");
return strBuf.toString();
}
int num = Integer.parseInt(numStr); //将字符串转换成整数
//转换成二进制数
strBuf = toBinary(num);
return strBuf.toString();
}
//判断接收的数字是否超过了整数型的存储范围。
public static boolean isToLarge(String numStr) {
String max = Integer.MAX_VALUE + "";
if(max.length() < numStr.length()) { //如果位数大于最大整数的位数直接返回true
return true;
} else if(max.length() == numStr.length()) { //如果位数等于最大整数的位数则将其都转换为double型计算
Double maxDouble = Double.parseDouble(max);
Double numStrDouble = Double.parseDouble(numStr);
if(maxDouble < numStrDouble) {
return true;
}
}
return false;
}
//判断接收的数字中是否含有非法字符
public static boolean includeIlligleChar(String numStr) {
char[] cNum = numStr.toCharArray();
for(int i = 0; i < cNum.length; i++) {
if(cNum[i] <= '0' || cNum[i] >= '9') {
return true;
}
}
return false;
}
//将接收的数字转换成二进制数
public static StringBuffer toBinary(int num) {
StringBuffer strBuf = new StringBuffer();
int bit;
while(num > 1) { //如果数字还没有除完,则继续求二进制数。
bit = num%2;
strBuf.append(bit + "");
num = num/2;
}
if(num == 0) { //加上最后一位。
strBuf.append('0');
} else if(num == 1) {
strBuf.append('1');
}
strBuf = strBuf.reverse();
return strBuf;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一行字符串:");
String str = scan.nextLine();
stringToBinaryArr(str);
}
}
求高手指点一下,哪里错了???
|
|