A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);
}

6 个回复

倒序浏览
代码比较乱
回复 使用道具 举报
  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.         }
复制代码
回复 使用道具 举报
回复 使用道具 举报
好多大神
回复 使用道具 举报
大神   注释的好详细啊。这看起来清楚多了。
回复 使用道具 举报
围观大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马