目前计算器正常 只是有两处需要改进 本人实在做不出来 求求高手
当连着按两次符号的时候结果不对 比如 2加号减号后结果栏就会出现4
还有一点 结果栏表现形式是double形势 需要double数据 但是整数的时候也是显示一位小数点 如何改进呢?谢谢大人们了import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class MyCalculator extends JFrame implements ActionListener
{
public boolean dotExist, operated, equaled,opr; // boolean変数
private double  Num1; //  目前结果
private char lastOperator; // 之前运算符
public JTextField text; // 结果栏
private JButton dot, plus, minus, multi, div,  equal, clear; // 运算符
private JButton[] numbers; // 数字
// 
public MyCalculator()
{
setTitle("Calculator");
// 初始化
dotExist = false; // 小数点
operated = false; // 运算符
equaled = false; // 等号
Num1= 0;lastOperator = '?';
// 初始化
text = new JTextField("0");
text.setEditable(false);
text.setHorizontalAlignment(JTextField.RIGHT);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
 dot = new JButton(".");
plus = new JButton("+");
 minus = new JButton("-");
 multi = new JButton("*");
div = new JButton("/");
 equal = new JButton("=");
 clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
add(layout, text, 0, 0, 4, 1);
add(layout, numbers[1], 1, 0, 1, 1);
add(layout, numbers[2], 1, 1, 1, 1);
add(layout, numbers[3], 1, 2, 1, 1);
add(layout, numbers[4], 2, 0, 1, 1);
add(layout, numbers[5], 2, 1, 1, 1);
add(layout, numbers[6], 2, 2, 1, 1);
add(layout, numbers[7], 3, 0, 1, 1);
add(layout, numbers[8], 3, 1, 1, 1);
add(layout, numbers[9], 3, 2, 1, 1);
add(layout, dot, 4, 0, 1, 1);
add(layout, numbers[0], 4, 1, 1, 1);
add(layout, plus, 1, 3, 1, 1);
add(layout, minus, 2, 3, 1, 1);
add(layout, multi, 3, 3, 1, 1);
add(layout, div, 4, 3, 1, 1);
add(layout, equal, 4, 2, 1, 1);
add(layout, clear, 5, 0, 4, 1);}// 按钮方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)e.getSource();
if (btn == clear)
{
text.setText("0");
dotExist = false;
Num1 = 0;
lastOperator = '?';
}
else if (btn == equal)
{
op('=');}
else if (btn == plus)
{
op('+');
equaled = false;
}
else if (btn == minus)
{
op('-');
equaled = false;
}
else if (btn == multi)
{
op('*');
equaled = false;
}
else if (btn == div)
{
op('/');
equaled = false;
}
else
{
if (equaled)
Num1 = 0 ;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (text.getText().equals("0"))
text.setText("" + i) ;
else if(! operated)
text.setText(text.getText() + i);
else
{
text.setText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
text.setText(text.getText() + ".");
dotExist = true;
}
}
}
// 运算方法public void op( char operator)
{
double  Num2= Double.valueOf(text.getText()).doubleValue();if (lastOperator == '?')
{
    Num1 = Num2 ; 
    
}
else if (lastOperator == '+' )
{ Num1 += Num2;}
else if (lastOperator == '-')
{
Num1 -= Num2;}
else if (lastOperator == '*')
{
 Num1 *= Num2;
 
}
else if (lastOperator == '/')
{
    {
    if(Num2 != 0)
    Num1 /= Num2;
    else
    new Exception("Error");
    }
    lastOperator = operator;
}
else if (lastOperator == '=' && equaled)
Num1 = Num2;
text.setText("" + Num1);
operated = true;
lastOperator = operator;}// 画面、GridBagLayout方法
private void add(GridBagLayout layout, Component component, int row, int col, int width, int height)
{
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton)component).addActionListener(this);
getContentPane().add(component);
}// 主方法 
public static void main(String[] args)
{
MyCalculator calc = new MyCalculator();
calc.setSize(290, 400);
calc.setVisible(true);
}

解决方案 »

  1.   

    package javaapplication3; 
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; public class Main extends JFrame implements ActionListener{ 
    private JTextField resultField; //窓口 
    private JButton s1,s2,s3,s4,s5,s6,s7,s8,s9,s0,b1,b2,b3,b4,f1,f2,f3; //ボタン 
    private boolean end,add,sub,mul,div;  // 演算子を判断 
    private String str; 
    private double num1,num2;  //演算数字 public Main(){ 
    super(" MyCalculator");    //名前 
    resultField=new JTextField("0"); 
    resultField.setEditable(false); 
    resultField.setHorizontalAlignment(JTextField.RIGHT); 
    s1=new JButton(" 1 "); 
    s2=new JButton(" 2 "); 
    s3=new JButton(" 3 "); 
    s4=new JButton(" 4 "); 
    s5=new JButton(" 5 "); 
    s6=new JButton(" 6 "); 
    s7=new JButton(" 7 "); 
    s8=new JButton(" 8 "); 
    s9=new JButton(" 9 "); 
    s0=new JButton(" 0 "); 
    b1=new JButton(" + "); 
    b2=new JButton(" - "); 
    b3=new JButton(" * "); 
    b4=new JButton(" / "); 
    f1=new JButton(" . "); 
    f2=new JButton(" = "); 
    f3=new JButton(" C "); GridBagLayout layout = new GridBagLayout(); 
    getContentPane().setLayout(layout); 
    getContentPane().setSize(300, 300); 
    add(layout, resultField, 0, 0, 4, 1); 
    add(layout, s1, 1, 0, 1, 1); 
    add(layout, s2, 1, 1, 1, 1); 
    add(layout, s3, 1, 2, 1, 1); 
    add(layout, s4, 2, 0, 1, 1); 
    add(layout, s5, 2, 1, 1, 1); 
    add(layout, s6, 2, 2, 1, 1); 
    add(layout, s7, 3, 0, 1, 1); 
    add(layout, s8, 3, 1, 1, 1); 
    add(layout, s9, 3, 2, 1, 1); 
    add(layout, f1, 4, 0, 1, 1); 
    add(layout, s0, 4, 1, 1, 1); 
    add(layout, b1, 1, 3, 1, 1); 
    add(layout, b2, 2, 3, 1, 1); 
    add(layout, b3, 3, 3, 1, 1); 
    add(layout, b4, 4, 3, 1, 1); 
    add(layout, f2, 4, 2, 1, 1); 
    add(layout, f3, 5, 0, 4, 1); 

    public void num(int i){ 
    String s = null; 
    s=String.valueOf(i); 
    if(end){ 
    //  もしくは数字を入力した resultFieldは0になる 
    resultField.setText("0"); 
    end=false; } 
    if((resultField.getText()).equals("0")){ 
    //もしくは resultFieldは0だったら、数字が覆う 
    resultField.setText(s); } 
    else{ 
    //resultFieldに0ない,配列に数字を加える 
    str = resultField.getText() + s; 
    resultField.setText(str); } 
    } public void actionPerformed(ActionEvent e){ //数字イベント 
    if(e.getSource()==s1) 
    num(1); 
    else if(e.getSource()==s2) 
    num(2); 
    else if(e.getSource()==s3) 
    num(3); 
    else if(e.getSource()==s4) 
    num(4); 
    else if(e.getSource()==s5) 
    num(5); 
    else if(e.getSource()==s6) 
    num(6); 
    else if(e.getSource()==s7) 
    num(7); 
    else if(e.getSource()==s8) 
    num(8); 
    else if(e.getSource()==s9) 
    num(9); 
    else if(e.getSource()==s0) 
    num(0); //演算子イベント 
    else if(e.getSource()==b1) 
    sign(1); 
    else if(e.getSource()==b2) 
    sign(2); 
    else if(e.getSource()==b3) 
    sign(3); 
    else if(e.getSource()==b4) 
    sign(4); 
    else if(e.getSource()==f3) 
    sign(5); 
    //イコール 
    else if(e.getSource()==f1){ 
    str=resultField.getText(); 
    if(str.indexOf(".") <=1){ 
    str+="."; 
    resultField.setText(str); 


    else if(e.getSource()==f2){ 
    num2=Double.parseDouble(resultField.getText()); 
    if(add){ 
    num1=num1 + num2;} 
    else if(sub){ 
    num1=num1 - num2;} 
    else if(mul){ 
    num1=num1 * num2;} 
    else if(div){ 
    num1=num1 / num2;} 
    resultField.setText(String.valueOf(num1)); 
    end=true; 
    } } 
    public void sign(int s){ 
    if(s==1){ 
    add=true; 
    sub=false; 
    mul=false; 
    div=false; 

    else if(s==2){ 
    add=false; 
    sub=true; 
    mul=false; 
    div=false; 

    else if(s==3){ 
    add=false; 
    sub=false; 
    mul=true; 
    div=false; 

    else if(s==4){ 
    add=false; 
    sub=false; 
    mul=false; 
    div=true; 

    else if(s==5){ 
    add=false; 
    sub=false; 
    mul=false; 
    div=false; 
    num1 = 0; 
    num2 = 0; 
    resultField.setText("0"); 

    num1=Double.parseDouble(resultField.getText()); 
    end=true; 

    public static void main(String[] args){ 
    Main th1=new Main(); 
    th1.pack(); 
    th1.show(); 
    }   private void add(GridBagLayout layout, Component component, int row, int col, int width, int height) 

    GridBagConstraints constraints = new GridBagConstraints(); 
    constraints.fill = GridBagConstraints.BOTH; 
    constraints.insets = new Insets(10, 2, 10, 2); 
    constraints.weightx = 100; 
    constraints.weighty = 100; 
    constraints.gridx = col; 
    constraints.gridy = row; 
    constraints.gridwidth = width; 
    constraints.gridheight = height; 
    layout.setConstraints(component, constraints); 
    if (component instanceof JButton) 
    ((JButton)component).addActionListener(this); 
    getContentPane().add(component); 


    这个呢 
      

  2.   

    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; public class ZhuLei extends JFrame implements ActionListener 

    public boolean dotExist, operated, equaled,opr; // boolean変数 
    private double  Num1; //  目前结果 
    private char lastOperator; // 之前运算符 
    public JTextField text; // 结果栏 
    private JButton dot, plus, minus, multi, div,  equal, clear; // 运算符 
    private JButton[] numbers; // 数字 
    // 
    public ZhuLei() 

    setTitle("Calculator"); 
    // 初始化 
    dotExist = false; // 小数点 
    operated = false; // 运算符 
    equaled = false; // 等号 
    Num1= 0; lastOperator = '?'; 
    // 初始化 
    text = new JTextField("0"); 
    text.setEditable(false); 
    text.setHorizontalAlignment(JTextField.RIGHT); 
    numbers = new JButton[10]; 
    for (int i = 0; i < 10; i++) 
    numbers[i] = new JButton("" + i); 
    dot = new JButton("."); 
    plus = new JButton("+"); 
    minus = new JButton("-"); 
    multi = new JButton("*"); 
    div = new JButton("/"); 
    equal = new JButton("="); 
    clear = new JButton("AC"); 
    // 将窗口物体放入窗口 
    GridBagLayout layout = new GridBagLayout(); 
    getContentPane().setLayout(layout); 
    add(layout, text, 0, 0, 4, 1); 
    add(layout, numbers[1], 1, 0, 1, 1); 
    add(layout, numbers[2], 1, 1, 1, 1); 
    add(layout, numbers[3], 1, 2, 1, 1); 
    add(layout, numbers[4], 2, 0, 1, 1); 
    add(layout, numbers[5], 2, 1, 1, 1); 
    add(layout, numbers[6], 2, 2, 1, 1); 
    add(layout, numbers[7], 3, 0, 1, 1); 
    add(layout, numbers[8], 3, 1, 1, 1); 
    add(layout, numbers[9], 3, 2, 1, 1); 
    add(layout, dot, 4, 0, 1, 1); 
    add(layout, numbers[0], 4, 1, 1, 1); 
    add(layout, plus, 1, 3, 1, 1); 
    add(layout, minus, 2, 3, 1, 1); 
    add(layout, multi, 3, 3, 1, 1); 
    add(layout, div, 4, 3, 1, 1); 
    add(layout, equal, 4, 2, 1, 1); 
    add(layout, clear, 5, 0, 4, 1); } // 按钮方法 
    public void actionPerformed(ActionEvent e) 

    JButton btn = (JButton)e.getSource(); 
    if (btn == clear) 

    text.setText("0"); 
    dotExist = false; 
    Num1 = 0; 
    lastOperator = '?'; 

    else if (btn == equal) 

    op('='); } 
    else if (btn == plus) 

    op('+'); 
    equaled = false; 

    else if (btn == minus) 

    op('-'); 
    equaled = false; 

    else if (btn == multi) 

    op('*'); 
    equaled = false; 

    else if (btn == div) 

    op('/'); 
    equaled = false; 

    else 

    if (equaled) 
    Num1 = 0 ; 
    for (int i = 0; i < 10; i++) 
    if (btn == numbers[i]) 

    if (text.getText().equals("0")) 
    text.setText("" + i) ; 
    else if(! operated) 
    text.setText(text.getText() + i); 
    else 

    text.setText("" + i); 
    operated = false; 


    if (btn == dot && ! dotExist) 

    text.setText(text.getText() + "."); 
    dotExist = true; 



    // 运算方法
    public void op( char operator) 

    char lastOperator1=operator;
    double  Num2= Double.valueOf(text.getText()).doubleValue(); 
    if (lastOperator == '?') 

        Num1 = Num2 ; 
        

    else if (lastOperator != '?'&& lastOperator1=='+') 
    {  if (lastOperator == '+') 
    {  Num1 += Num2; 

    else if (lastOperator == '-') 

    Num1 -= Num2;  } 
    else if (lastOperator == '*') 

    Num1 *= Num2;  } 
    else if (lastOperator == '/') 

        { 
        if(Num2 != 0) 
        Num1 /= Num2; 
        else 
        new Exception("Error"); 
        } 
        lastOperator = operator; 


    else if (lastOperator != '?'&& lastOperator1=='-') 

    if (lastOperator == '+') 
    {  Num1 += Num2; 

    else if (lastOperator == '-') 

    Num1 -= Num2;  } 
    else if (lastOperator == '*') 

    Num1 *= Num2;  } 
    else if (lastOperator == '/') 

        { 
        if(Num2 != 0) 
        Num1 /= Num2; 
        else 
        new Exception("Error"); 
        } 
        lastOperator = operator; 
    } } 
    else if (lastOperator != '?'&& lastOperator1=='*') 

    if (lastOperator == '+') 
    {  Num1 += Num2; 

    else if (lastOperator == '-') 

    Num1 -= Num2;  } 
    else if (lastOperator == '*') 

    Num1 *= Num2;  } 
    else if (lastOperator == '/') 

        { 
        if(Num2 != 0) 
        Num1 /= Num2; 
        else 
        new Exception("Error"); 
        } 
        lastOperator = operator; 
    }

    else if (lastOperator != '?'&& lastOperator1=='/') 

        { 
        if(Num2 != 0) 
        Num1 /= Num2; 
        else 
        new Exception("Error"); 
        } 
        lastOperator = operator; 

    else if (lastOperator != '?'&& lastOperator1=='=') 
    {
       if (lastOperator == '+') 
    {  Num1 += Num2; 

    else if (lastOperator == '-') 

    Num1 -= Num2;  } 
    else if (lastOperator == '*') 

    Num1 *= Num2;  } 
    else if (lastOperator == '/') 

        { 
        if(Num2 != 0) 
        Num1 /= Num2; 
        else 
        new Exception("Error"); 
        } 
        lastOperator = operator; 
    }
    }
    text.setText("" + Num1); 
    operated = true; 
    lastOperator=operator;} // 画面、GridBagLayout方法 
    private void add(GridBagLayout layout, Component component, int row, int col, int width, int height) 

    GridBagConstraints constraints = new GridBagConstraints(); 
    constraints.fill = GridBagConstraints.BOTH; 
    constraints.insets = new Insets(10, 2, 10, 2); 
    constraints.weightx = 100; 
    constraints.weighty = 100; 
    constraints.gridx = col; 
    constraints.gridy = row; 
    constraints.gridwidth = width; 
    constraints.gridheight = height; 
    layout.setConstraints(component, constraints); 
    if (component instanceof JButton) 
    ((JButton)component).addActionListener(this); 
    getContentPane().add(component); 
    } // 主方法  
    public static void main(String[] args) 

    ZhuLei calc = new ZhuLei(); 
    calc.setSize(290, 400); 
    calc.setVisible(true); 
    }
    }这是刚才修改的,,虽然多点代码,,
      

  3.   

    你加我QQ,,我也正在学java 286063305
      

  4.   

    结果栏表现形式是double形势 需要double数据 但是整数的时候也是显示一位小数点 如何改进呢? ni zhun bei zen me pan duan jie guo shi zheng shu ?