diff --git a/uml10_10.java b/uml10_10.java index ef8bfa8..517f820 100644 --- a/uml10_10.java +++ b/uml10_10.java @@ -1,22 +1,24 @@ -import java.util.Scanner; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; public class uml10_10 { - // 将任意进制字符串转换为十进制整数 + // 将任意进制字符串转换为十进制整数 public static int toDecimal(String number, int base) { int decimal = 0; int power = 0; - - // 从字符串的末尾开始处理 + // 从字符串的末尾开始处理 for (int i = number.length() - 1; i >= 0; i--) { char digit = number.charAt(i); - // 如果是数字字符(0-9) + // 如果是数字字符(0-9) if (Character.isDigit(digit)) { int value = Character.getNumericValue(digit); decimal += value * Math.pow(base, power); } - // 如果是字母字符(A-F 或 a-f),表示10-15 + // 如果是字母字符(A-F 或 a-f),表示10-15 else if (Character.isLetter(digit)) { char upperDigit = Character.toUpperCase(digit); int value = upperDigit - 'A' + 10; @@ -31,14 +33,14 @@ public class uml10_10 { return decimal; } - // 将十进制整数转换为任意进制字符串 + // 将十进制整数转换为任意进制字符串 public static String fromDecimal(int number, int base) { if (number == 0) { return "0"; } StringBuilder result = new StringBuilder(); - char[] digits = "0123456789ABCDEF".toCharArray(); // 支持到16进制 + char[] digits = "0123456789ABCDEF".toCharArray(); // 支持到16进制 boolean isNegative = number < 0; if (isNegative) { @@ -59,34 +61,66 @@ public class uml10_10 { } public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - - System.out.print("请输入源进制(2-16):"); - int sourceBase = scanner.nextInt(); - scanner.nextLine(); // 消耗掉换行符 - - System.out.print("请输入目标进制(2-16):"); - int targetBase = scanner.nextInt(); - scanner.nextLine(); // 消耗掉换行符 - - System.out.print("请输入要转换的" + sourceBase + "进制数字:"); - String number = scanner.nextLine().trim(); // 读取实际的数字输入 - - // 验证源进制数字是否有效 - for (char c : number.toCharArray()) { - if (!Character.isDigit(c) && !(Character.isLetter(c) && (Character.toUpperCase(c) >= 'A' && Character.toUpperCase(c) <= 'F') && sourceBase > 10)) { - throw new IllegalArgumentException("Invalid character in source base number: " + c); + // 创建窗口 + JFrame frame = new JFrame("进制转换器"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(400, 300); + frame.setLayout(new GridLayout(5, 2)); // 网格布局 + + // 创建组件 + JLabel sourceBaseLabel = new JLabel("源进制(2-16):"); + JTextField sourceBaseField = new JTextField(); + + JLabel targetBaseLabel = new JLabel("目标进制(2-16):"); + JTextField targetBaseField = new JTextField(); + + JLabel numberLabel = new JLabel("要转换的数字:"); + JTextField numberField = new JTextField(); + + JButton convertButton = new JButton("转换"); + JLabel resultLabel = new JLabel("转换结果:"); + + // 添加组件到窗口 + frame.add(sourceBaseLabel); + frame.add(sourceBaseField); + frame.add(targetBaseLabel); + frame.add(targetBaseField); + frame.add(numberLabel); + frame.add(numberField); + frame.add(convertButton); + frame.add(resultLabel); + + // 添加按钮事件处理 + convertButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + int sourceBase = Integer.parseInt(sourceBaseField.getText().trim()); + int targetBase = Integer.parseInt(targetBaseField.getText().trim()); + String number = numberField.getText().trim(); + + // 验证源进制数字是否有效 + for (char c : number.toCharArray()) { + if (!Character.isDigit(c) && + !(Character.isLetter(c) && (Character.toUpperCase(c) >= 'A' && Character.toUpperCase(c) <= 'F') && sourceBase > 10)) { + throw new IllegalArgumentException("Invalid character in source base number: " + c); + } + } + + // 将源进制数字转换为十进制 + int decimalNumber = toDecimal(number, sourceBase); + + // 将十进制数字转换为目标进制 + String convertedNumber = fromDecimal(decimalNumber, targetBase); + + // 显示结果 + resultLabel.setText("转换后的" + targetBase + "进制数字是:" + convertedNumber); + } catch (IllegalArgumentException ex) { + JOptionPane.showMessageDialog(frame, "错误: " + ex.getMessage(), "输入错误", JOptionPane.ERROR_MESSAGE); + } } - } - - // 将源进制数字转换为十进制 - int decimalNumber = toDecimal(number, sourceBase); - - // 将十进制数字转换为目标进制 - String convertedNumber = fromDecimal(decimalNumber, targetBase); - - System.out.println("转换后的" + targetBase + "进制数字是:" + convertedNumber); - - scanner.close(); + }); + // 显示窗口 + frame.setVisible(true); } -} \ No newline at end of file +}