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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾俊锋 中级黑马   /  2014-5-6 00:32  /  1382 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾俊锋 于 2014-5-25 00:12 编辑
  1. class Demo01
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = new int[]{32,14,53,23,46,27,76,57,69,86};
  6.                 for (int x=0; x<=arr.length-1; x++)
  7.                 {                        
  8.                                 System.out.print(arr[x]+"的2进制为"+Integer.toBinaryString(arr[x])+","+"\t");
  9.                                 System.out.print(arr[x]+"的8进制为"+"0"+Integer.toOctalString(arr[x])+","+"\t");
  10.                                 System.out.print(arr[x]+"的16进制为"+"0x"+Integer.toHexString(arr[x])+","+"\t");
  11.                                 System.out.println();                        
  12.                 }        
  13.         }
  14. }
复制代码


最后打印结果第一列跟第二列格式正确,到第二列跟第三列之间,怎么就分不开,没有制表符作用。
结果如下,
32的2进制为100000,      32的8进制为040, 32的16进制为0x20,
14的2进制为1110,        14的8进制为016, 14的16进制为0xe,
53的2进制为110101,      53的8进制为065, 53的16进制为0x35,
23的2进制为10111,       23的8进制为027, 23的16进制为0x17,
46的2进制为101110,      46的8进制为056, 46的16进制为0x2e,
27的2进制为11011,       27的8进制为033, 27的16进制为0x1b,
76的2进制为1001100,     76的8进制为0114,        76的16进制为0x4c,
57的2进制为111001,      57的8进制为071, 57的16进制为0x39,
69的2进制为1000101,     69的8进制为0105,        69的16进制为0x45,
86的2进制为1010110,     86的8进制为0126,        86的16进制为0x56,
求大神解释,纠结好久了,

3 个回复

倒序浏览
本帖最后由 thinkervsruler 于 2014-5-6 02:29 编辑
  1. class Demo01
  2. {
  3.                 public static void main(String[] args)
  4.                 {
  5.                                 int[] arr = new int[]{32,14,53,23,46,27,76,57,69,86};
  6.                                 for (int x=0; x<=arr.length-1; x++)
  7.                                 {                       
  8.                                                 System.out.print( arr[x]+"的2进制为"+Integer.toBinaryString(arr[x])+" \t");    // \t前面加1个空格
  9.                                                 System.out.print( arr[x]+"的8进制为0"+Integer.toOctalString(arr[x])+"  \t");    // \t前面加2个空格
  10.                                                 System.out.println( arr[x]+"的16进制为0x"+Integer.toHexString(arr[x]) );                     
  11.                                 }      
  12.                }
  13. }
复制代码
LZ,我将您的代码优化修改了下,按上面的代码运行,是可以达到预期效果的,但是这个解决方法有点牵强了,希望有大神可以提出更好的解决方法,制表符\t原理如下
问题在于制表符的空格跳越上,一行字符串,每8位形成一个区间,在某区间中如果"\t"之前无输出数据,那直接横向向右跳8个空格(英文输入法下8个,中文输入法下4个,即\t占8字节空间),如果"\t"前有数据,那么连同前面的数据在内加上"\t"产生的空格跳越也是8个。下面举几个例子应该就容易明白了。
System.out.println("a"+"\t"+"1");                输出结果为:a       1,   中间有7个空格
System.out.println("abcd"+"\t"+"2");           输出结果为:abcd    2,   中间有4个空格
System.out.println("abcdefg"+"\t"+"3");      输出结果为:abcdefg 3,    中间有1个空格
System.out.println("abcdefgh"+"\t"+"4");     输出结果为:abcdefgh        4,    中间有8个空格


评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
学习了,刚刚也查阅了下,说是缓冲区的固定容量控制的,楼上的解释让人更容易理解。
回复 使用道具 举报
thinkervsruler 发表于 2014-5-6 02:16
LZ,我将您的代码优化修改了下,按上面的代码运行,是可以达到预期效果的,但是这个解决方法有点牵强了,希 ...

谢谢,问了好多人,都只有这么一种解决办法,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马