转换十进制,二进制,八进制,十六进制中的错误

时间:2015-09-15 23:15:39

标签: java binary hex decimal octal

我有一个我正在处理的代码,我想为bin,octal,hex和decimal构建一个转换器。我有一个框架,其中有一个文本空间,您可以输入其中任何一个选项。根据您输入输入的位置,程序会将其转换为其他形式。我的问题是,它可以将小数转换为其他形式,但反之亦然?我感到困惑,因为我觉得逻辑流程在那里,任何帮助都会受到这位编码员的极大赞赏。

import javax.swing.*; //library used for the layout
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Gui extends JFrame implements ActionListener{  

JLabel l1 = new JLabel("   Decimal   ");
JLabel l2 = new JLabel("    Binary   ");
JLabel l3 = new JLabel("    Octal    "); 
JLabel l4 = new JLabel(" Hexadecimal ");
JTextField f1 = new JTextField(20);
JTextField f2 = new JTextField(20);
JTextField f3 = new JTextField(20);
JTextField f4 = new JTextField(20);
JButton b1 = new JButton("Calculate");

public Gui() {
    setLayout(new FlowLayout()); //row x column

    add(l1);
    add(f1);
    add(l2);
    add(f2);        
    add(l3);
    add(f3);
    add(l4);
    add(f4);
    add(b1);
    b1.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
    if(e.getSource()==this.b1){
        if(this.f1.getText()!="")
        {
            String text1 = this.f1.getText();//get the text and store it in a string named text1
            int num1 = Integer.parseInt(text1); // get the integer value of the variable text1

            String binary = Integer.toBinaryString(num1); //convert the variable num1 to binary
            this.f2.setText(binary);

            String octal = Integer.toOctalString(num1); //convert the variable num1 to binary
            this.f3.setText(octal);

            String hexadecimal = Integer.toHexString(num1); //convert the variable num1 to binary
            this.f4.setText(hexadecimal);       
        } 
    }
}
}

2 个答案:

答案 0 :(得分:1)

此行要求字符串为十进制。

int num1 = Integer.parseInt(text1);

如果文本不总是十进制,则需要一种方法让用户指定文本的格式。

您可以使用radix参数解析二进制,八进制和十六进制。

解析二进制文件:

int num1 = Integer.parseInt(text,2);

解析八进制:

int num1 = Integer.parseInt(text,8);

解析十六进制:

int num1 = Integer.parseInt(text,16);

要指定使用哪个,您可以有多个按钮或向每个JTextField添加一个ActionListener。每个人都从该字段中读取文本并设置其他值。

答案 1 :(得分:0)

  

我很困惑,因为我认为逻辑流程就在那里,

不,您拥有此逻辑,查看f1字段并将该十进制值转换为其他格式。

  

根据您输入输入的位置,程序将转换它   到其他形式。

我想你想要实现的是各种形式的任何形式的价值,并在用户按下计算按钮时将其转换为其他格式。

因此,您将决定如何执行此操作,

  1. 天气您要删除计算按钮并更新收听每个JTextField上的更改的字段。

  2. 保留“计算”按钮,并假设上次更新的JTextField是您用于转换为其他格式的JTextField。

  3. 在任何一种情况下,

    您必须收听JTextField的更改。使用,

     // Listen for changes in the text f1
         f1.getDocument().addDocumentListener(new DocumentListener() {
          public void changedUpdate(DocumentEvent e) {
            update();
          }
          public void removeUpdate(DocumentEvent e) {
            update();
          }
          public void insertUpdate(DocumentEvent e) {
            update();
          }
    
          public void update() {
             // update a local variable to keep the last updated JTextFeild 
             // or update to the rest of the formats on the fly.
             // You can update/ show errors of the input values 
    
             //Scenario 1,
    
             int decimal = Integer.parseInt(f1.getText());
             String binary = Integer.toBinaryString(decimal); //convert the variable num1 to binary
             this.f2.setText(binary);
    
             String octal = Integer.toOctalString(decimal); //convert the variable num1 to binary
             this.f3.setText(octal);
    
             String hexadecimal = Integer.toHexString(decimal); //convert the variable num1 to binary
             this.f4.setText(hexadecimal);  
          }
        });