我先写了一个顺序栈的类,代码如下:(没语法错误)
代码
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进制的数

解决方案 »

  1.   

    把栈改为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进制以内的进制了。
      

  2.   

    把栈改为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进制以内的进制了。 
      

  3.   

    超过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类也有类似的方法。