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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵阳 中级黑马   /  2012-6-23 08:24  /  1780 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵阳 于 2012-6-23 10:05 编辑

今天练习发现
  1. /*查表法,通过查表十进制转十六进制,思路是建立一个包含十六进制的各个字符的数组。然后通过数组直接转化。*/
  2. class Shao
  3. {
  4. public static void main(String[] args)
  5. {
  6. shao_1(60);
  7. }
  8. public static void shao_1(int key)
  9. {
  10. char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
  11. char[]chr=new char[8];
  12. //for (int x=0;x<8;x++ )
  13. //int pose=0;
  14. while (key!=0)

  15. {
  16. <FONT color=red>int pose=0;
  17. </FONT>
  18. int temp=key&15;

  19. //System.out.println(chs[temp]);

  20. chr[pose++]=chs[temp];

  21. key=key>>>4;

  22. }
  23. //for (int x=chr.length-1;x>=0 ;x-- )
  24. for (int x=0;x<chr.length-1 ;x++ )
  25. {
  26. System.out.print(chr[x]+",");
  27. }
  28. }
  29. }
复制代码
结果是3,,  , , , , ,

如果将int pose=0  放在while外面,代码如下
  1. /*查表法,通过查表十进制转十六进制,思路是建立一个包含十六进制的各个字符的数组。然后通过数组直接转化。*/
  2. class Shao
  3. {
  4. public static void main(String[] args)
  5. {
  6. shao_1(60);
  7. }
  8. public static void shao_1(int key)
  9. {
  10. char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
  11. char[]chr=new char[8];
  12. //for (int x=0;x<8;x++ )
  13. <FONT color=red>int pose=0;
  14. </FONT>while (key!=0)

  15. {
  16. //int pose=0;

  17. int temp=key&15;

  18. //System.out.println(chs[temp]);

  19. chr[pose++]=chs[temp];

  20. key=key>>>4;

  21. }
  22. //for (int x=chr.length-1;x>=0 ;x-- )
  23. for (int x=0;x<chr.length-1 ;x++ )
  24. {
  25. System.out.print(chr[x]+",");
  26. }
  27. }
  28. }
复制代码
得到结果是C,3,,,,,,


为什么两次得的结果不一样,郁闷


6 个回复

倒序浏览
int pose=0;在循环里面的话,每循环一次pose的值会重新置0,
放在外面就不会。结果肯定不一样啊

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
大哥,你为嘛要把int pose=0放到while里面去呢?就是为了做个试验?那你得先搞清楚pose是干嘛的。

pose是为了倒着打印转化成十六进制的arr数组的下标值。while循环的目的就是不停地对key进行位运算,直到它完全转化成十六进制为止,每一次转化arr数组就会向右前进一位。

所以int pose=0是初始化下标的位置,从arr数组的0下标位开始依次往后。
要是你将int pose=0放在while循环里面了,它每一次做完位运算,结果进入到下一次while 循环里就又被初始化一次,那结果数组就一直在arr的0下标位置上,根本没有移动过,结果肯定有问题。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
/*查表法,通过查表十进制转十六进制,思路是建立一个包含十六进制的各个字符的数组。然后通过数组直接转化。*/
class demo
{
public static void main(String[] args)
{
shao_1(60);
}
public static void shao_1(int key)
{
char []chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
char[]chr=new char[8];
while (key!=0)
{
int pose=0;

int temp=key&15;
chr[pose++]=chs[temp];
key=key>>>4;
}
for (int x=0;x<chr.length-1 ;x++ )
{
System.out.print("x="+x+"--"+chr[x]+",");
}
}
}
结果x=0--3,x=1-- ,x=2-- ,......
while循环第二次执行pose还是零,再次将temp写入了chr的[0]位将第一次的覆盖了。
回复 使用道具 举报
17行的 int pose = 0;第一个程序放在while循环里面,当第一次&15之后算出来的值传给temp,然后把chs[temp]的值传给chr[pose],然后pose+1,这个时候pose的值是1,当道洗一次循环时,pose的值应该从1开始循环,但是程序进入while循环又重新把pose值定义成0,这样结果会把第一次循环后得出的值覆盖掉.所以最后得出的结果只有1位.正常情况60得出的值是2位.
第二个程序吧int pose = 0;放在while循环外,就不会出现第一种的情况.
回复 使用道具 举报
while (key!=0)
{
int pose=0;
int temp=key&15;
chr[pose++]=chs[temp];
key=key>>>4;
pose=0放在while循环里面,执行每次循环后,pose的值重新置0,在外面就不一样了。
回复 使用道具 举报
金龙 中级黑马 2012-6-23 15:22:36
7#
其实你可以倒着打印数组,或者直接int pose =7,然后倒着添加,正着打印
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马