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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘海源 中级黑马   /  2012-7-24 16:49  /  1609 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
class Demo2 {
public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  System.out.println("请输入一个数:");
  int num=sc.nextInt();
  getHet(num);
}
public static void getHet(int num)
{
  getChar(num,1,1);
}
public static void getChar(int num,int base,int offset)
{
  if(num==0)
   return;
  char[] ch={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  char[] arr=new char[32];
  int l=arr.length;
        while(num!=0)
  {
    int temp = num & base;
    arr[--l]=ch[temp];
       num=num>>>offset;
  }
  for(int j=1;j<arr.length;j++)
  {
   System.out.print(arr[j]);//为什么会有那么长的空行呢,郁闷有点,不好看???就这点不好的有谁可以、
                          //解决一下呢???以前没发现感觉做的还行今天出了问题唉!!!
  }
}
}

QCB$@SEU4MR(E)E7YM1[6.jpg (11.88 KB, 下载次数: 16)

QCB$@SEU4MR(E)E7YM1[6.jpg

5 个回复

倒序浏览
  1. package test1;

  2. import java.util.Arrays;
  3. import java.util.Scanner;

  4. public class Test2 {
  5.         public static void main(String[] args) {
  6.                 Scanner sc = new Scanner(System.in);
  7.                 System.out.print("请输入一个数:");
  8.                 int num = sc.nextInt();
  9.                 getHet(num);
  10.         }

  11.         public static void getHet(int num) {
  12.                 getChar(num, 1, 1);
  13.         }

  14.         public static void getChar(int num, int base, int offset) {
  15.                 if (num == 0)
  16.                         return;

  17.                 char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
  18.                                 'B', 'C', 'D', 'E', 'F' };
  19.                 char[] arr = new char[32];

  20.                 int l = arr.length;
  21.                 int count = 0;// 记录向数组中存放了几个字符
  22.                 while (num != 0) {
  23.                         int temp = num & base;
  24.                         arr[--l] = chs[temp];
  25.                         num = num >>> offset;
  26.                         count++;
  27.                 }

  28.                 // 对数组进行截取
  29.                 arr = Arrays.copyOfRange(arr, arr.length - count, arr.length);
  30.                 for (char c : arr) {
  31.                         System.out.print(c);
  32.                 }

  33.         }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
加强for循环啊谢谢奥
回复 使用道具 举报
和加强for循环没关系的
主要是
// 对数组进行截取,要在while里对count进行累加,每加一次,代表往arr里放了一个
arr = Arrays.copyOfRange(arr, arr.length - count, arr.length);
回复 使用道具 举报
import java.util.*;
class Demo2 {
public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  System.out.println("请输入一个数:");
  int num=sc.nextInt();
  getHet(num);
}
public static void getHet(int num)
{
  getChar(num,1,1);
}
public static void getChar(int num,int base,int offset)
{
  if(num==0)
   return;
  char[] ch={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  char[] arr=new char[32];
  int temp=arr.length;//将l指向数组的最后一个元素。
        while(num!=0)
  {
    int temp = num & base;
    arr[--temp]=ch[pos];//将转换的第一个数存储到数组的最后一个角标所指的空间内,然后依次向前推
       num=num>>>offset;
  }
  for(int j=temp;j<arr.length;j++)//这里j要等于temp,因为temp最后存储的是转换后的最后一个元素。
                                             //从数组里面的有效位开始打印,就可以避免了前面无效位的打印即:空格
  {
   System.out.print(arr[j]);//为什么会有那么长的空行呢,郁闷有点,不好看???就这点不好的有谁可以、
                          //解决一下呢???以前没发现感觉做的还行今天出了问题唉!!!
  }
}
}
问题出现在最后一个for循环上面,打印数组里面的元素没有从有效位开始打印
你的程序为了避免误解我修改了l变量名为temp

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  System.out.println("请输入一个数:");
  int num=sc.nextInt();
  getHet(num);
}
public static void getHet(int num)
{
  getChar(num,1,1);
}
public static void getChar(int num,int base,int offset)
{
  if(num==0)
   return;
  char[] ch={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  char[] arr=new char[32];
  int l=arr.length;
        while(num!=0)
  {
    int temp = num & base;
    arr[--l]=ch[temp];
       num=num>>>offset;
  }
  for(int j=1;j<arr.length;j++)   循环前没有对数组进行截取
  {
   System.out.print(arr[j]);//为什么会有那么长的空行呢,郁闷有点,不好看???就这点不好的有谁可以、
                          //解决一下呢???以前没发现感觉做的还行今天出了问题唉!!!
  }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马