/**
* 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
提示如下:
* 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况
* ,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2
* ,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2
* ,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式
* (不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
* @author yajun
*/
public class Binary {
public static void main(String[] args) {
//局部变量
String str = null;
int deci;
int bina = 0;
Scanner scan=new Scanner(System.in);
Binary obj=new Binary();
//逻辑
System.out.println("欢迎使用10进制转二进制程序,请输入2的31次方范围内的数字,输入exit,退出程序,谢谢。");
while(true){
str=scan.nextLine();
if(str.equals("exit")){
break;
}
deci=obj.convert(str);
if(deci!=-1){
bina=obj.toBinary(deci);
}
//调试
System.out.println("用户输入:"+str+"\t转换为二进制为:"+bina);
}
}
private int toBinary(int decimal){
int binary;
StringBuilder sb=new StringBuilder();
int remainder;
//业务逻辑
while(decimal!=0){
remainder=decimal%2;
decimal/=2;
sb.append(remainder);
}
sb.reverse();
binary=Integer.valueOf(sb.toString());
//调试
//System.out.println(sb);
return binary;
}
//测试toBinary方法是否正确
@Test
public void testToBinary(){
int data=10;
int result=toBinary(data);
Assert.assertEquals(Integer.toBinaryString(data), result+"");
}
//判断字符串是否可以转换成整数,如果可以转换之
private int convert(String str){
int result = -1;
char[] temp;
String message;
boolean isChar = false;
try {
result=Integer.valueOf(str);
} catch (NumberFormatException e) {
temp=str.toCharArray();
for(char ch:temp){
if(!(ch>='0'&&ch<='9')){
message="字符串中包含非数字字符:"+ch;
isChar=true;
System.out.println(message);
}
}
if(!isChar&&(Double.valueOf(str)>=Math.pow(2, 31))){
message="数字太大,超出了java中int值的范围";
System.out.println(message);
}
}//End of try
return result;
}
@Test
public void testConvert(){
//convert("yajun");
int result=convert(String.valueOf((long)Math.pow(2, 32)-1));
System.out.println(result);
}
@Test
//1除2的0余1
public void testDivision(){
System.out.println(1/2);
System.out.println(1%2);
}
}