diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/modules.xml b/.idea/modules.xml index 5f24dd5..1c7b03d 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ - - + + diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..ff9fc31 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + { + "associatedIndex": 5 +} + + + + + + + + + + + + + + + + + + + + + 1728559103908 + + + + \ No newline at end of file diff --git a/jinzhi/jinzhi.iml b/jinzhi/Second_Jinzhi.iml similarity index 100% rename from jinzhi/jinzhi.iml rename to jinzhi/Second_Jinzhi.iml diff --git a/jinzhi/src/JinZhi.java b/jinzhi/src/JinZhi.java deleted file mode 100644 index 6b26597..0000000 --- a/jinzhi/src/JinZhi.java +++ /dev/null @@ -1,103 +0,0 @@ -import java.util.Scanner; - -public class JinZhi { - - // 辅助方法:将任意进制的数转换为十进制 - /** - * 将任意进制的数转换为十进制数 - * - * @param number 要转换的数的字符串表示 - * @param base 该数的原始进制 - * @return 转换后的十进制数 - */ - public static int toDecimal(String number, int base) { - int decimalValue = 0; // 十进制结果 - int power = 0; // 当前位的权重(幂次) - - // 从字符串的最后一个字符开始遍历 - for (int i = number.length() - 1; i >= 0; i--) { - char digit = number.charAt(i); // 当前字符 - int value = 0; // 当前字符对应的十进制值 - - // 根据字符计算其十进制值 - if (Character.isDigit(digit)) { - value = digit - '0'; // 如果是数字,直接减去'0'的ASCII码 - } else if (digit >= 'A' && digit <= 'F') { - value = digit - 'A' + 10; // 如果是大写字母,减去'A'的ASCII码后加10 - } else if (digit >= 'a' && digit <= 'f') { - value = digit - 'a' + 10; // 如果是小写字母,减去'a'的ASCII码后加10 - } else { - throw new IllegalArgumentException("输入的数字中包含无效字符: " + digit); - } - - // 将当前字符的十进制值乘以权重后累加到结果中 - decimalValue += value * Math.pow(base, power); - power++; // 权重增加 - } - - return decimalValue; - } - - // 辅助方法:将十进制数转换为任意进制 - /** - * 将十进制数转换为任意进制的数 - * - * @param decimalValue 要转换的十进制数 - * @param base 目标进制 - * @return 转换后的目标进制数的字符串表示 - */ - public static String fromDecimal(int decimalValue, int base) { - if (decimalValue == 0) { - return "0"; // 如果十进制数为0,直接返回"0" - } - - StringBuilder result = new StringBuilder(); // 用于存储转换结果的StringBuilder对象 - char[] digits = "0123456789ABCDEF".toCharArray(); // 表示所有可能的进制字符的数组 - - // 使用循环进行进制转换 - while (decimalValue > 0) { - int remainder = decimalValue % base; // 取余数作为当前位的值 - result.insert(0, digits[remainder]); // 将当前位的值添加到结果的开头 - decimalValue /= base; // 十进制数除以目标进制,为下一次循环做准备 - } - - return result.toString(); // 返回转换后的结果字符串 - } - - // 主方法:执行进制转换 - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); // 创建Scanner对象用于读取用户输入 - - // 读取要转换的数、其原始进制和目标进制 - System.out.print("请输入要转换的数: "); - String number = scanner.nextLine(); - System.out.print("请输入该数的原始进制(2-16): "); - int inputBase = scanner.nextInt(); - - // 读取目标进制 - System.out.print("请输入目标进制(2-16): "); - int targetBase = scanner.nextInt(); - - // 验证输入的有效性 - if (inputBase < 2 || inputBase > 16 || targetBase < 2 || targetBase > 16) { - System.out.println("无效的进制。进制必须在2到16之间。"); - return; // 如果输入无效,则直接返回,不执行后续操作 - } - - try { - // 将输入的数转换为十进制数 - int decimalValue = toDecimal(number, inputBase); - - // 将十进制数转换为目标进制数 - String result = fromDecimal(decimalValue, targetBase); - - // 输出转换后的结果 - System.out.println(number + "初始是" + inputBase + "进制;" + "在" + targetBase + "进制下是"+ result); - } catch (IllegalArgumentException e) { - // 捕获并处理非法参数异常 - System.out.println("错误: " + e.getMessage()); - } - - scanner.close(); // 关闭Scanner对象,释放资源 - } -} diff --git a/jinzhi/src/jinzhi2.java b/jinzhi/src/jinzhi2.java new file mode 100644 index 0000000..8618b42 --- /dev/null +++ b/jinzhi/src/jinzhi2.java @@ -0,0 +1,209 @@ +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 jinzhi2 extends JFrame { + + public jinzhi2() { + + } + + public void init() { + setContenpane(); + actionListen(); + mainFrame(); + + } + + //图形化界面函数 + public void mainFrame() { + //设置窗口的参数 + setBounds(500,50,530,500); + //禁用重新调整窗口大小的功能 + setResizable(false); + //关闭窗口的右上角的叉的同时关闭程序 + setDefaultCloseOperation(EXIT_ON_CLOSE); + //设置窗口上当前程序的名字 + setTitle("第二题进制转换"); + //清除默认的布局管理器 + getContentPane().setLayout(null); + //设置窗口显示 + setVisible(true); + } + + //控件 + JTextField jt1, jt2, jt3, answer_text; + JLabel jl1, jl2, jl3, answer, help, tips; + JButton button; + //控件集合,方便修改字体等 + ArrayList 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 jinzhi2().init(); + } + + + +} diff --git a/jisuan/jisuan.iml b/jisuan/First_Jisuan.iml similarity index 100% rename from jisuan/jisuan.iml rename to jisuan/First_Jisuan.iml diff --git a/out/production/Second_Jinzhi/jinzhi2$1.class b/out/production/Second_Jinzhi/jinzhi2$1.class new file mode 100644 index 0000000..abfae6d Binary files /dev/null and b/out/production/Second_Jinzhi/jinzhi2$1.class differ diff --git a/out/production/Second_Jinzhi/jinzhi2.class b/out/production/Second_Jinzhi/jinzhi2.class new file mode 100644 index 0000000..f6b0a0b Binary files /dev/null and b/out/production/Second_Jinzhi/jinzhi2.class differ diff --git a/out/production/jinzhi/JinZhi.class b/out/production/jinzhi/JinZhi.class deleted file mode 100644 index c328a5f..0000000 Binary files a/out/production/jinzhi/JinZhi.class and /dev/null differ diff --git a/out/production/jinzhi/mm$1.class b/out/production/jinzhi/mm$1.class new file mode 100644 index 0000000..3b3006b Binary files /dev/null and b/out/production/jinzhi/mm$1.class differ diff --git a/out/production/jinzhi/mm.class b/out/production/jinzhi/mm.class new file mode 100644 index 0000000..93e0685 Binary files /dev/null and b/out/production/jinzhi/mm.class differ