Я построил калькулятор, используя 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)
{}
}
}
Это мой код.