陈永辉新增功能2

main
Cyh Name 1 month ago
parent db836ec725
commit 03a928ee96

@ -1,4 +1,7 @@
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 class uml10_10 {
@ -6,7 +9,6 @@ public class uml10_10 {
public static int toDecimal(String number, int base) { public static int toDecimal(String number, int base) {
int decimal = 0; int decimal = 0;
int power = 0; int power = 0;
// 从字符串的末尾开始处理 // 从字符串的末尾开始处理
for (int i = number.length() - 1; i >= 0; i--) { for (int i = number.length() - 1; i >= 0; i--) {
char digit = number.charAt(i); char digit = number.charAt(i);
@ -59,34 +61,66 @@ public class uml10_10 {
} }
public static void main(String[] args) { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建窗口
JFrame frame = new JFrame("进制转换器");
System.out.print("请输入源进制2-16"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int sourceBase = scanner.nextInt(); frame.setSize(400, 300);
scanner.nextLine(); // 消耗掉换行符 frame.setLayout(new GridLayout(5, 2)); // 网格布局
System.out.print("请输入目标进制2-16"); // 创建组件
int targetBase = scanner.nextInt(); JLabel sourceBaseLabel = new JLabel("源进制2-16");
scanner.nextLine(); // 消耗掉换行符 JTextField sourceBaseField = new JTextField();
System.out.print("请输入要转换的" + sourceBase + "进制数字:"); JLabel targetBaseLabel = new JLabel("目标进制2-16");
String number = scanner.nextLine().trim(); // 读取实际的数字输入 JTextField targetBaseField = new JTextField();
// 验证源进制数字是否有效 JLabel numberLabel = new JLabel("要转换的数字:");
for (char c : number.toCharArray()) { JTextField numberField = new JTextField();
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); 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);
}
} }
} });
// 显示窗口
// 将源进制数字转换为十进制 frame.setVisible(true);
int decimalNumber = toDecimal(number, sourceBase);
// 将十进制数字转换为目标进制
String convertedNumber = fromDecimal(decimalNumber, targetBase);
System.out.println("转换后的" + targetBase + "进制数字是:" + convertedNumber);
scanner.close();
} }
} }
Loading…
Cancel
Save