本程序提供1-36进制的int数据转换。
javaSwing开发。
package asd; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Locale; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; //进制转换工具 @SuppressWarnings("serial") public class RadixChangeToolUI extends JFrame { public RadixChangeToolUI() { } public void init() { setContenpane(); actionListen(); mainFrame(); } //图形化界面函数 public void mainFrame() { //设置窗口的参数 setBounds(500,50,530,300); //禁用重新调整窗口大小的功能 setResizable(false); //关闭窗口的右上角的叉的同时关闭程序 setDefaultCloseOperation(EXIT_ON_CLOSE); //设置窗口上当前程序的名字 setTitle("进制转换工具V1.01.01.008"); //清除默认的布局管理器 getContentPane().setLayout(null); //设置窗口显示 setVisible(true); } //控件 JTextField jt1, jt2, jt3, answer_text; JLabel jl1, jl2, jl3, answer, help, tips; JButton button; //控件集合,方便修改字体等 ArrayList<JComponent> list_conponent = new ArrayList<>(); //放置控件 public void setContenpane() { //文本输入框 jt1 = new JTextField(); jt2 = new JTextField(); jt3 = new JTextField(); answer_text = new JTextField(); jt1.setBounds(120, 30, 120, 40); jt2.setBounds(120, 100, 120, 40); jt3.setBounds(120, 170, 120, 40); answer_text.setBounds(300, 170, 200, 40); list_conponent.add(jt1); list_conponent.add(jt2); list_conponent.add(jt3); list_conponent.add(answer_text); getContentPane().add(jt1); getContentPane().add(jt2); getContentPane().add(jt3); getContentPane().add(answer_text); //标签 jl1 = new JLabel("输入数据:"); jl2 = new JLabel("输入进制:"); jl3 = new JLabel("转换进制:"); answer = new JLabel("转换结果:"); help = new JLabel("若结果不显示则表示数据过大无法显示!"); tips = new JLabel("本程序提供 1-36 进制互转,数据支持int(过大无效)"); jl1.setBounds(20, 30, 100, 40); jl2.setBounds(20, 100, 100, 40); jl3.setBounds(20, 170, 100, 40); answer.setBounds(300, 120, 200, 60); help.setBounds(280, 30, 220, 30); tips.setBounds(20, 240, 350, 30); list_conponent.add(jl1); list_conponent.add(jl2); list_conponent.add(jl3); list_conponent.add(answer); //help不存入集合 //tips不存入集合 getContentPane().add(jl1); getContentPane().add(jl2); getContentPane().add(jl3); getContentPane().add(answer); getContentPane().add(help); getContentPane().add(tips); //按钮 button = new JButton("转换"); button.setBounds(300, 70, 80, 35); list_conponent.add(button); getContentPane().add(button); //字体 for(JComponent jc:list_conponent) { jc.setFont(new Font("黑体",Font.BOLD,20)); } } //事件监听函数 public void actionListen() { button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //获取左边三个文本输入框内容 String a = jt1.getText(); int b = Integer.parseInt(jt2.getText()); int c = Integer.parseInt(jt3.getText()); //判断文本输入框内容是否合法(第一个) char[] chars = a.toCharArray(); int len = chars.length; for (int i = 0; i < len; i++) { if(chars[i] < 48 || chars[i] > 57){ if(chars[i] < 65 || chars[i] > 90){ //首个位置可以是符号位,但是只能是 '-' '+' if(i == 0){ if(chars[0] != '-' && chars[0] != '+'){ answer.setText("输入数据有误"); answer_text.setText("NULL"); return; } }else { answer.setText("输入数据有误"); answer_text.setText("NULL"); return; } } } } //需要判断一下所给类型是否合法,判断输入数据中的最大字符。 //第二个文本输入框与第三个文本输入框的进制是否合法 int maxChar = 1; for (char t : chars) { //ASCII转换,本来分别是 -48 -55,但是因为是进制类型故需要加一 //(例:最大字符为 '0' 时,最小为 '1' 进制; // 最大字符为 '9' 时,最小为 '10' 进制; // 最大字符为 'F' 时,最小为 '16'进制) if(t < 57){ maxChar = Math.max(maxChar, t - 47); }else{ maxChar = Math.max(maxChar, t - 54); } } if(b < 1 || b > 36 || maxChar > b || c < 1 || c >36) { answer.setText("输入进制有误"); answer_text.setText("NULL"); return; } //转换结果 int model_num; String sum; if(b != c){ //将其他进制数据转换为10进制 model_num = Integer.parseInt(a, b); //将10进制数据转换为其他进制 转换为大写字母 sum = Integer.toString(model_num, c).toUpperCase(Locale.ROOT); answer.setText("转换结果:"); answer_text.setText(sum); return; }else{ //原进制与所需进制相同无需转换 answer.setText("转换结果:"); answer_text.setText(a); return; } } }); } //主函数 public static void main(String[] args) { new RadixChangeToolUI().init(); } }
jdk8
无论输入是否合法,一定返回结果。