摇摆-尝试使除以零时的简单计算器显示错误

时间:2018-09-27 20:16:04

标签: java swing user-interface

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JCalculator implements ActionListener {

private JButton[] buttons;
private JLabel display;

//Put button shapes in an array
private String[] button_Shapes = {"7", "8", "9", "/", "4", "5", "6", "x", "1",
                     "2", "3", "-", "0", "C", "=", "+"};

private int operand1, operand2, result;
private String operator;

//Create new form Calculator
public JCalculator(){

    //Create new JFrame container
    JFrame jfrm = new JFrame("Calculator");

    //Set the initial size for frame
    jfrm.setSize(500,500);

    //Terminate the program when the user closes the application.
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Set the calculator to center on the screen
    jfrm.setLocationRelativeTo(null);

    //Set the icon
    ImageIcon icon = new ImageIcon("C:/Users/zetsu/Desktop/JCalculator.png");
    jfrm.setIconImage(icon.getImage());

    //Create label
    display = new JLabel("0", JLabel.RIGHT); 

    //Put border around display label
    display.setBorder(BorderFactory.createLineBorder(Color.black));

    //Create a grid layout
    GridLayout layout = new GridLayout(4,4);

    //Create a panel and set layout
    JPanel bottom_Panel = new JPanel();
    bottom_Panel.setLayout(layout);

    //Create an array of buttons
    buttons = new JButton[16];        

    for(int i = 0; i < button_Shapes.length; i++){
        //make new button name
        JButton btn = new JButton("" + button_Shapes[i]);
        buttons[i] = btn;
        //add action listener for each button
        btn.addActionListener(this);
        //add each button to panel
        bottom_Panel.add(btn);
    }

    //Set [=] button to default
    jfrm.getRootPane().setDefaultButton(buttons[14]);

    //Set Mnemonic to Alt+[C]
    buttons[13].setMnemonic(KeyEvent.VK_C);

    //Add label to content pane
    jfrm.add(display, BorderLayout.NORTH);

    //Add panel to content pane
    jfrm.add(bottom_Panel, BorderLayout.CENTER);

    jfrm.setVisible(true);                
}

@Override
public void actionPerformed(ActionEvent e) {
    JButton btn = (JButton)e.getSource();

    if(display.getText().equals("0") 
            || display.getText().equals(button_Shapes[3])
            || display.getText().equals(button_Shapes[7])
            || display.getText().equals(button_Shapes[11])
            || display.getText().equals(button_Shapes[15])){
        display.setText("");
    }

    if(btn == buttons[0] || btn == buttons[1] || btn == buttons[2]
        || btn == buttons[4] || btn == buttons[5] || btn == buttons[6]
        || btn == buttons[8] || btn == buttons[9] || btn == buttons[10]
        || btn == buttons[12]){

        display.setText("" + display.getText()+ btn.getText());

        if(display.getText().length() > 7){
            buttons[0].setEnabled(false);
            buttons[1].setEnabled(false);
            buttons[2].setEnabled(false);
            buttons[4].setEnabled(false);
            buttons[5].setEnabled(false);
            buttons[6].setEnabled(false);
            buttons[8].setEnabled(false);
            buttons[9].setEnabled(false);
            buttons[10].setEnabled(false);
            buttons[12].setEnabled(false);
        }
    }

    if(btn == buttons[3] || btn == buttons[7] || btn == buttons[11]
            || btn == buttons[15]){

        buttons[0].setEnabled(true);
        buttons[1].setEnabled(true);
        buttons[2].setEnabled(true);
        buttons[4].setEnabled(true);
        buttons[5].setEnabled(true);
        buttons[6].setEnabled(true);
        buttons[8].setEnabled(true);
        buttons[9].setEnabled(true);
        buttons[10].setEnabled(true);
        buttons[12].setEnabled(true);

        operand1 = Integer.parseInt(display.getText());
        operator = btn.getText();
        display.setText("" + operator);
    }

    if(btn == buttons[14]){

        buttons[0].setEnabled(true);
        buttons[1].setEnabled(true);
        buttons[2].setEnabled(true);
        buttons[4].setEnabled(true);
        buttons[5].setEnabled(true);
        buttons[6].setEnabled(true);
        buttons[8].setEnabled(true);
        buttons[9].setEnabled(true);
        buttons[10].setEnabled(true);
        buttons[12].setEnabled(true);

        operand2 = Integer.parseInt(display.getText());            
        if(operator.equals(button_Shapes[3])){
            if(operand2 == 0){
                display.setText("Div by 0");
            }
            else{
                result = operand1 / operand2;
            }
        }
        else if(operator.equals(button_Shapes[7])){
            result = operand1 * operand2;
        }
        else if(operator.equals(button_Shapes[11])){
            result = operand1 - operand2;
        }
        else if(operator.equals(button_Shapes[15])){
            result = operand1 + operand2;
        }

        if(String.valueOf(result).length() > 8){
            display.setText("Overflow");
        }
        else{
            display.setText(String.valueOf(result));
        }

    }

    if(btn == buttons[13]){
        buttons[0].setEnabled(true);
        buttons[1].setEnabled(true);
        buttons[2].setEnabled(true);
        buttons[4].setEnabled(true);
        buttons[5].setEnabled(true);
        buttons[6].setEnabled(true);
        buttons[8].setEnabled(true);
        buttons[9].setEnabled(true);
        buttons[10].setEnabled(true);
        buttons[12].setEnabled(true);

        display.setText("0");
    }
}

public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            new JCalculator();
        }
    });
}

}

我正在尝试编写一个程序来创建一个简单计算器的swing gui。最初,计算器将显示零。所有操作均采用以下形式: (operand1 operator1操作数2 =)operator2操作数3 = 输入操作数1时,初始零消失,并且操作数1出现在显示屏上。按下操作员1时,屏幕上的数字消失,操作员出现。输入操作员2后,操作员消失,并且操作员2显示在屏幕上。当按下等号时,操作结果将显示在屏幕上。我想做的是每当数字被零除时显示错误“ Div by 0”。但是,每当我将零除,加,减或乘以零时,我都会不断收到错误NumberFormatException。我认为问题出在这个if语句中:

if(display.getText().equals("0") 
   || display.getText().equals(button_Shapes[3])                    
   || display.getText().equals(button_Shapes[7])                    
   || display.getText().equals(button_Shapes[11])                    
   || display.getText().equals(button_Shapes[15])){            
          display.setText("");
}

此操作的目的是在每次按第一个数字或按操作员键时擦除显示屏上的零。我认为可以解决此问题的方法是以某种方式通知if语句,操作数2的值为零,因此它不会将文本设置为(“”)。我不知道该怎么做。请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要重新考虑整个应用程序。但是也许您应该尝试使用类似方法来实际找出是否被零除:

    try
    {
        //do calculation

    } catch (ArithmeticException ae)
    {
        if (ae.getMessage().equalsIgnoreCase("/ by zero"))
        {
            //do something
        }

    }