进制转换的问题

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进制的数
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用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进制以内的进制了。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

62,622

社区成员

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

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