我无法将二进制转换为十进制,十进制转换为二进制


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BinaryGUI extends BinaryGUIDemo {

public static void main(String[] args) {
new BinaryGUI();
}
private JFrame frame;
private JButton button;
private JTextField text;
private JTextField text2;
private String decimalnumber = null;
public BinaryGUI() {

frame = new JFrame("Conversion!");
JLabel label = new JLabel("Binary:");
frame.setLayout(new FlowLayout());
frame.add(label);
text = new JTextField(15);
frame.add(text);
JLabel label2 = new JLabel("Decimal:");
frame.add(label2);
text2 = new JTextField(15);
frame.add(text2);

button = new JButton("Convert");
button.addActionListener(new ButtonListener());
frame.add(button);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void Convert() {
String binary = text.getText();
int i;
for (i = 0; i < binary.length(); i++) {
char select = binary.charAt(binary.length() - i - 1);
char number = (char) (select * Math.pow(2, i)); 
decimalnumber += number;
}
}
public class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Convert();
if (button.getText().equals("Convert")) {
text2.setText(decimalnumber);
text.getText();
text2.getText();
} else {
}
}
}
}

我可以运行程序,但由于某种原因,它显示/放置随机字符而不是二进制的初始值,我似乎无法运行程序的十进制回二进制。我该如何改进这个代码?为了明确它不会将二进制转换为十进制,以及我如何将其转换回十进制转换为二进制,如果有一些代码可以帮助我,将非常感激。

你差不多到了,你的问题是从char到int的转换。Java中的字符以UTF-16 unicode存储。这意味着在幕后,位模式与屏幕上的值不匹配。https://naveenr.net/unicode-character-set-and-utf-8-utf-16-utf-32-encoding/

当你读入一个char 1时它会被转换成49 0会被转换成48

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BinaryGUI {
public static void main(String[] args) {
new BinaryGUI();
}
private JFrame frame;
private JButton button;
private JTextField text;
private JTextField text2;
private int decimalnumber = 0;
public BinaryGUI() {
frame = new JFrame("Conversion!");
JLabel label = new JLabel("Binary:");
frame.setLayout(new FlowLayout());
frame.add(label);
text = new JTextField(15);
frame.add(text);
JLabel label2 = new JLabel("Decimal:");
frame.add(label2);
text2 = new JTextField(15);
frame.add(text2);
button = new JButton("Convert");
button.addActionListener(new ButtonListener());
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void Convert() {
String binary = text.getText();
decimalnumber = 0;
int i;
for (i = 0; i < binary.length(); i++) {
char select = binary.charAt(binary.length() - i - 1);
System.out.println((int) select); // outputs the char as an int
int number = (int) ((select - 48) * Math.pow(2, i));
decimalnumber += number;
}
}
public class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Convert();
text2.setText("" + decimalnumber);
text.getText();
text2.getText();
}
}
}

注意我将decimalnumber设置为int,然后使用字符串连接将其打印出来

转换成十进制:

int deicimal = 12;
String binaryString = Integer.toBinaryString(deicimal);   // it will be "1100"

转换成二进制:

String binaryString = "1100";  
int decimal = Integer.parseInt(binaryString, 2);  // it will be 12

最新更新