Compare commits

..

1 Commits
main ... hxt

Author SHA1 Message Date
hxt1218 532a0f3887 jzzh
8 months ago

@ -1,114 +0,0 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BaseConversion2 {
// 将指定进制的数字转换为十进制
public static int convertToDecimal(String number, int base) {
int decimalValue = 0;
int power = 1; // 初始值为1对应于base^0
for (int i = number.length() - 1; i >= 0; i--) {
char digit = number.charAt(i);
int digitValue = Character.isDigit(digit)
? digit - '0'
: Character.toUpperCase(digit) - 'A' + 10; // A-F
decimalValue += digitValue * power;
power *= base; // 更新权重
}
return decimalValue;
}
// 将十进制转换为指定进制
public static String convertFromDecimal(int number, int base) {
if (number == 0) return "0"; // 特殊情况处理
StringBuilder result = new StringBuilder();
while (number > 0) {
int remainder = number % base;
result.append(remainder < 10 ? (char) ('0' + remainder) : (char) ('A' + remainder - 10));
number /= base;
}
return result.reverse().toString(); // 反转结果
}
// 主方法,创建用户界面
public static void main(String[] args) {
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("转换结果:");
// 事件处理
convertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int sourceBase = Integer.parseInt(sourceBaseField.getText());
int targetBase = Integer.parseInt(targetBaseField.getText());
String number = numberField.getText().toUpperCase();
// 输入验证
if (!isValidInput(number, sourceBase)) {
resultLabel.setText("请输入有效的数字!");
return;
}
int decimalValue = convertToDecimal(number, sourceBase);
String result = convertFromDecimal(decimalValue, targetBase);
resultLabel.setText("转换结果: " + result);
} catch (NumberFormatException ex) {
resultLabel.setText("进制应为数字,且范围为 2-16!");
} catch (Exception ex) {
resultLabel.setText("转换过程中发生错误: " + ex.getMessage());
}
}
});
// 添加组件到框架
frame.add(sourceBaseLabel);
frame.add(sourceBaseField);
frame.add(targetBaseLabel);
frame.add(targetBaseField);
frame.add(numberLabel);
frame.add(numberField);
frame.add(convertButton);
frame.add(resultLabel);
frame.setVisible(true);
}
// 检查用户输入的数字是否有效
private static boolean isValidInput(String number, int base) {
for (char digit : number.toCharArray()) {
int digitValue = Character.isDigit(digit)
? digit - '0'
: Character.toUpperCase(digit) - 'A' + 10;
if (digitValue < 0 || digitValue >= base) {
return false; // 数字超出进制范围
}
}
return true; // 输入有效
}
}

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>进制转换</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
padding: 20px;
border: 1px solid #ccc;
border-radius: 10px;
max-width: 400px;
}
label, input, button {
display: block;
margin-bottom: 10px;
}
#result {
font-weight: bold;
}
</style>
</head>
<body>
<h2>任意进制转换器</h2>
<label for="fromBase">输入进制 (2-16):</label>
<input type="number" id="fromBase" min="2" max="16" required>
<label for="number">输入数字:</label>
<input type="text" id="number" placeholder="例如1010" required>
<label for="toBase">转换为进制 (2-16):</label>
<input type="number" id="toBase" min="2" max="16" required>
<button id="convertButton">转换</button>
<h3>结果:</h3>
<div id="result"></div>
<script>
document.getElementById('convertButton').addEventListener('click', () => {
const fromBase = parseInt(document.getElementById('fromBase').value);
const number = document.getElementById('number').value.trim();
const toBase = parseInt(document.getElementById('toBase').value);
// 验证输入的数字是否合法
if (!/^[0-9A-Fa-f]+$/.test(number) || !isValidForBase(number, fromBase)) {
document.getElementById('result').textContent = '输入的数字不符合指定的进制规则!';
return;
}
// 转换为十进制
const decimalValue = parseInt(number, fromBase);
const convertedValue = decimalValue.toString(toBase).toUpperCase();
// 显示结果
document.getElementById('result').textContent = convertedValue;
});
function isValidForBase(numStr, base) {
const validChars = '0123456789ABCDEF'.slice(0, base);
return [...numStr].every(char => validChars.includes(char.toUpperCase()));
}
</script>
</body>
</html>
Loading…
Cancel
Save