日期:2014-05-20  浏览次数:20902 次

代码运行出错
请问这段代码为什么运行不了?
题目是:
/**
 *编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,
 *然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输
 *入的字符串不能转换成一个十进制整数的情况,并对转换失败的原
 *因要区分出是数字太大,还是其中包含有非数字字符的情况。提示
 *:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数
 *的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数
 *就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打
 *印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别
 *是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
 */
package thirty;
import java.io.*;
import java.util.*;
public class Test9 {
public static void main(String[] args) {
char c;

int i,j,num,b;

StringBuilder sb = new StringBuilder();

 

char[] data = new char[]{'0','1','2','3','4','5','6','7','8','9'};

/*

 * 注意:这里是i<args[0].length(),而非i<args.length,我就因为一开始把这里写成了i<args.length

 * 结果折腾了半天运行结果就是不对,后来仔细查看才发现这里出了问题,哎,程序员一定要细心啊

 * 下面的第一个循环用来检测字符串里面有没有非数字字符

 */

for(i=0;i<args[0].length();i++) {                

c = args[0].charAt(i);

for(j=0;j<data.length;j++) {

if(c==data[j]) {

break;

}

}

if(j>=data.length) {

System.out.println(args[0]+"中含有非数字字符");

return;

}

}

double doub = Double.parseDouble(args[0]);//首先转换为double类型,因为double类型表示的范围比较大

if(doub>Integer.MAX_VALUE) {//进行比较看是不是超出了int类型的范围

System.out.println("数字过大,不能装换为int类型整数");

}else{

num = Integer.parseInt(args[0]);

while(num>0) {//求二进制数

b = num%2;

sb.append(b);

num = num/2;

}

System.out.println(sb.reverse());

}

 

        //String s = "121.456";                

//System.out.println(s.length());      

//因为上面循环我写成了i<args.length,导致运行异常,这里我进行了测试,受到启发发现了原因

}
}


------解决方案--------------------
我是打酱油的