Математические операции - PullRequest
0 голосов
/ 19 октября 2019

Я построил калькулятор, используя java-апплеты, и он работал нормально, когда я выполняю операции над 2 операндами, но когда дело доходит до 3 операндов, он не учитывает 3-й операнд для вычисления. Например, если вы запустите «5 + 5 + 5», вы получите «15» в качестве ответа, но я получу «10» в качестве ответа. Я знаю, что допустил логическую ошибку, но не могу понять ошибку
.

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.Math; 
import java.util.*;
/* 
<applet code="Summa" width=500 height=500>
</applet>
*/

public class Summa extends Applet implements ActionListener
{
    double d=0.0;
    TextField t1;int w=0;
    Button b[]=new Button[10];
    Button add,sub,mul,div,clear,mod,EQ,dot;
    char[] operators=new char[50];
    public void init()  
    {
        t1=new TextField(10);
        GridLayout gl=new GridLayout(4,5);
        setLayout(gl);
        for(int i=0;i<10;i++)
        {
            b[i]=new Button(""+i);  
        }
        add=new Button("+");
        sub=new Button("-");
        mul=new Button("*");
        div=new Button("/");
        mod=new Button("%");
        dot=new Button(".");
        clear=new Button("AC");
        EQ=new Button("=");
        t1.addActionListener(this);
        add(t1);
        for(int i=0;i<10;i++)
        {
            add(b[i]);  //adding numkeys
        }
        add(add);
        add(sub);
        add(mul);
        add(div);
        add(mod);
        add(dot);
        add(clear);
        add(EQ);
        for(int i=0;i<10;i++)
        {
            b[i].addActionListener(this);
        }
        add.addActionListener(this);
        sub.addActionListener(this);
        mul.addActionListener(this);
        div.addActionListener(this);
        mod.addActionListener(this);
        clear.addActionListener(this);
        EQ.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae)
    {
        try{
        String str=ae.getActionCommand();
        char ch = str.charAt(0);    //converting string to character
        if (Character.isDigit(ch))  //Character class contains isDigit
        {   
            t1.setText(t1.getText()+str);

        }
        else
        if(str.equals("+"))
        {
            t1.setText(t1.getText()+"+");
            operators[w]='+';w++;
        }
        else if(str.equals("-"))
        {
            t1.setText(t1.getText()+"-");
            operators[w]='-';w++;
        }
        else if(str.equals("*"))
        {
            t1.setText(t1.getText()+"*");
            operators[w]='*';w++;
        }
        else if(str.equals("/"))
        {
            t1.setText(t1.getText()+"/");
            operators[w]='/';w++;
        }
        else if(str.equals("%"))
        {
            t1.setText(t1.getText()+"%");
            operators[w]='%';w++;
        }
        /*else if(str.equals("."))
        {
            t1.setText(t1.getText()+".");
        }*/
        else if(str.equals("="))
        {
            int n1,n2,o=0;
            String g=t1.getText();//g is the mathematical expression
            String[] s = g.split("\\W");    //splitting the numbers only
            System.out.println(Arrays.toString(s));
            n1=s.length;            //no.of numbers
            n2=w;       //contains the operators
            d=d+Double.parseDouble(s[o]);
            o++;
            System.out.println(d);
            for(int i=0;i<n2;i++)
            {
                char OP;
                OP=operators[i];
                if(OP=='+'){
                    String a1;
                    a1=s[o];
                    d=d+Double.parseDouble(a1);System.out.println(d);
                    i++;o++;}
                if(OP=='-'){
                    String a1;
                    a1=s[o];
                    d=d-Double.parseDouble(a1);System.out.println(d);
                    i++;o++;}
                if(OP=='*'){
                    String a1;
                    a1=s[o];
                    d=d*Double.parseDouble(a1);
                    i++;o++;}
                if(OP=='/'){
                    String a1;
                    a1=s[o];
                    d=d/Double.parseDouble(a1);
                    i++;o++;}
                if(OP=='%'){
                    String a1;
                    a1=s[o];
                    d=d%Double.parseDouble(a1);
                    i++;o++;}       
            }
            t1.setText(""+d);
            w=0;d=0.0;
            char[] operators=new char[50];``
        }   
        else if(str.equals("AC"))
        {
            t1.setText("");
            d=0.0;
            w=0;
        }throw new Exception("");
    }
    catch(Exception e)
    {}
    }
}

Это мой код.

...