黑马程序员技术交流社区

标题: 自己做的进制转换的小问题? [打印本页]

作者: 刘海源    时间: 2012-7-24 16:49
标题: 自己做的进制转换的小问题?
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, 下载次数: 31)

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

作者: 王志明    时间: 2012-7-24 17:18
  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. }
复制代码

作者: 刘海源    时间: 2012-7-24 17:19
加强for循环啊谢谢奥
作者: 王志明    时间: 2012-7-24 17:22
和加强for循环没关系的
主要是
// 对数组进行截取,要在while里对count进行累加,每加一次,代表往arr里放了一个
arr = Arrays.copyOfRange(arr, arr.length - count, arr.length);
作者: 姬仁贵    时间: 2012-7-24 17:36
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


作者: 李菁    时间: 2012-7-24 21:18
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]);//为什么会有那么长的空行呢,郁闷有点,不好看???就这点不好的有谁可以、
                          //解决一下呢???以前没发现感觉做的还行今天出了问题唉!!!
  }
}





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