黑马程序员技术交流社区

标题: 哪位大神可以加下注释,让我理解一下啊 [打印本页]

作者: 郭.威    时间: 2015-6-7 18:01
标题: 哪位大神可以加下注释,让我理解一下啊
public static void main(String[] args) throws Exception
{
int shang=0,yu;
boolean flag=false;
System.out.println("请输入一个数字(最大值为<"+Integer.MAX_VALUE+"):");
InputStream is = System.in;
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
char[] ch=new char[str.length()];
str.getChars(0, str.length(), ch, 0);
for(int a=0;a<str.length();a++)
{
if(!Character.isDigit(ch[a]))
{
System.out.println("有非数字字符");
System.exit(0);
}
}
try
{
shang=Integer.parseInt(str);
flag=true;
}
catch(Exception e)
{
System.out.println("数字过大");
}
str="";
if (flag)
{
while (shang != 0)
{
yu = shang % 2;
shang = shang / 2;
str = yu + str;
}
}
System.out.println(str);
}


作者: 武汉小菜鸟    时间: 2015-6-7 21:34
代码比较乱
作者: 想要那片海    时间: 2015-6-7 22:21
  1. public static void main(String[] args) throws Exception
  2.         {
  3.                 int shang=0,yu;
  4.                 boolean flag=false;
  5.                 //输出一条提示语句,
  6.                 System.out.println("请输入一个数字(最大值为<"+Integer.MAX_VALUE+"):");
  7.                 //我把你的三条流语句整合为一句,就是将将读取键盘定义为字符缓冲流
  8.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  9.                 //读取键盘录入的内容
  10.                 String str=br.readLine();
  11.                 //将键盘录入的内容转换为字符数组
  12.                 char[] ch=new char[str.length()];
  13.                 str.getChars(0, str.length(), ch, 0);
  14.                 //以上两句可以写成:char[] ch=str.toCharArray();
  15.                 for(int a=0;a<str.length();a++)
  16.                 {
  17.                         if(!Character.isDigit(ch[a]))//判断输入的内容是不是有效数字
  18.                         {
  19.                                 System.out.println("有非数字字符");
  20.                                 System.exit(0);
  21.                         }
  22.                 }
  23.                 try
  24.                 {//将输入的内容转换为数字
  25.                         shang=Integer.parseInt(str);
  26.                         flag=true;
  27.                 }
  28.                 catch(Exception e)
  29.                 {
  30.                         System.out.println("数字过大");
  31.                 }
  32.                         str="";
  33.                 if (flag)
  34.                 {
  35.                         while (shang != 0)//
  36.                         {
  37.                                 //除2取余,是在计算这个数的二进制表现形式
  38.                         yu = shang % 2;
  39.                         shang = shang / 2;
  40.                         //因为取余是从后向前取,所以要在最后实现正常的读取顺序,
  41.                         //这个地方可以用StringBuilder 的append 将余数添加到缓冲区结尾
  42.                         //最后将StringBuilder 翻转就可以
  43.                         str = yu + str;
  44.                         }
  45.                 }
  46.                 System.out.println(str);
  47.         }
复制代码

作者: 郭.威    时间: 2015-6-7 23:56
想要那片海 发表于 2015-6-7 22:21

谢了   看明白了
作者: hnyzhlq    时间: 2015-6-8 11:10
好多大神
作者: 天涯111    时间: 2015-6-8 11:14
大神   注释的好详细啊。这看起来清楚多了。
作者: Smile小思    时间: 2015-6-8 16:19
围观大神




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2