黑马程序员技术交流社区
标题:
自己做的进制转换的小问题?
[打印本页]
作者:
刘海源
时间:
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)
下载附件
2012-7-24 16:48 上传
作者:
王志明
时间:
2012-7-24 17:18
package test1;
import java.util.Arrays;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个数:");
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[] chs = { '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;
int count = 0;// 记录向数组中存放了几个字符
while (num != 0) {
int temp = num & base;
arr[--l] = chs[temp];
num = num >>> offset;
count++;
}
// 对数组进行截取
arr = Arrays.copyOfRange(arr, arr.length - count, arr.length);
for (char c : arr) {
System.out.print(c);
}
}
}
复制代码
作者:
刘海源
时间:
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