进制转换的问题

liumingwei2009 2009-09-28 10:43:52
我先写了一个顺序栈的类,代码如下:(没语法错误)
代码

public class ArrayStack {
public int[] data;
public int maxLength = 50;
public int top;


public void initStack() {
data = new int[maxLength];
top = -1;

}



public void push(int dataValue) {
data[top + 1] = dataValue;
top++;
}


public int pop() {
if(top < 0) {return 4444;}
int i = data[top];
top--;
return i;
}


public int getTop() {
if(top < 0) {return 44444;}
return data[top];
}


public void setEmpty() {
top = -1;
}

public boolean empty() {
if(top < 0) return true;
return false;
}


}


现在我想用它解决进制转换的问题,代码如下:
import javax.swing.JOptionPane;
public class Transfer {
public static void main(String[] args) {
ArrayStack ob = new ArrayStack();
String str1 = JOptionPane.showInputDialog("你想转什么数?");
int i = Integer.parseInt(str1);
String str2 = JOptionPane.showInputDialog("你想转成几进制数?");
int j = Integer.parseInt(str2);
ob.initStack();
while(i >= 1) {
ob.push(i%j);
i = i / j;
}
while(ob.empty() == false) {
System.out.print(ob.pop());
}
}


}


现在问题是,如果是超出10进制以后,数据表示有问题。
如何将它修改一下,让它也能装成16进制的数
...全文
126 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbug9002 2009-09-28
  • 打赏
  • 举报
回复
超过10进制,你不用0~9以外的字符,你怎么表示一位,就像16进制,0~9外,还有A~F,这样才能有16个字符来表示16进制中的一位.

非2进制的数计算机都没有办法直接运算.我们写的10进制整数,计算机真正运算的是二进制.而我们在代码中写的整数(10进制,16进制,8进制),要由JVM来释义,其它进制的数,jvm不识认的吧。所以也只能用字符串来表示除了10进制,16进制,8进制以外的数了。

另外:进制转换,java有现成的方法可用:比如Integer类的valueOf(String s, int radix)方法,可以把radix进制的字符串s转为一个Integer对象,而toString(int i, int radix)方法可以把一个int数i转为radix进制的字符串。Long类也有类似的方法。
liumingwei2009 2009-09-28
  • 打赏
  • 举报
回复
字符之间的运算还能进行数字一样的运算吗?
bigbug9002 2009-09-28
  • 打赏
  • 举报
回复
把栈改为char类型.
设一个
char[] charSet={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z'};

把这一句:ob.push(i%j);改为:ob.push(charSet[i%j]);
这样你就可以把10进制转为36进制以内的进制了。
bigbug9002 2009-09-28
  • 打赏
  • 举报
回复
把栈改为char类型.
设一个char[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

把这一句:ob.push(i%j);改为:ob.push(char[i%j]);
这样你就可以把10进制转为36进制以内的进制了。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧