プロが教えるわが家の防犯対策術!

こんにちは。プログラミング初心者なのでどうかご助言願います。

javaのSwing(JFRAME)で電卓を作ろうとしているのですが、一応動作はするのですが連続計算がうまくいきません
たとえば66(画面表示は66)*3(画面表示は3)-(画面表示は198)8(画面表示は8)=190
という計算をさせたいのですが、途中でうまくいってないみたいで
最終的な答えが58、という答えが出てしまいます。(途中はきちんと198と表示されます)
下のメソッドのどこが間違っているかご指摘頂けるとありがたいです

int val =0;
int val0=0;
String op = null;

//数字
public void numberreturn(int i){
val=val*10+ i;
resultTextField.setText((new Integer(val)).toString());
}
//演算子
public void calculate(String x){
if(op==null){
if(val0!=0){
op=x;
}else{
val0=val;
val=0;
op=x;}
}else if(val==0){
op=x;
}else if(val0!=0){
returning(val0,val,op);
op=x;
}else{
val0=val;
val=0;
op=x;
}
}
//結果表示
public void ansreturn(int i){
resultTextField.setText((new Integer(i)).toString());
}
//計算を行う関数
public void returning (int i,int j,String x){
if(x!=null){
int k;
if(x=="plus"){
k=i+j;
}
else if(x=="minus"){
k=i-j;
}
else if(x=="mult"){
k=i*j;
}
else{
try{
k=i/j;
}catch(Exception e){
k=0;
}
}
i=k;
ansreturn(i);
j=0;
x=null;
}else{
j=0;
x=null;
}

}

ボタンのほうは一応こんな感じです
private void minusButtonActionPerformed(java.awt.event.ActionEvent evt) {
calculate("minus");
}

private void equallButtonActionPerformed(java.awt.event.ActionEvent evt) {
returning(val0,val,op);
}


よろしくお願いします

A 回答 (2件)

returningメソッドの中で


一度も【val0とvalに対して代入していない】ため,
val0 = 66
val = 3

が変わらないから

66 - 8 = 58が行われている

もちろんこの58も代入されないから
66 * 3 - 8 + 5とかやると
66 + 5で71が表示される
    • good
    • 0
この回答へのお礼

御丁寧な回答、本当に有難う御座います!

returningメソッドの最後の
i=k;
j=0;
x=null;
この代入が失敗しているのでしょうか…
引数に対して最後に代入するメソッドにしたかったのですが、少し混乱気味です

お礼日時:2008/07/18 20:37

>この代入が失敗しているのでしょうか…


失敗している。

int型は値型だから
iやjではなく
valやval0に代入すれば多分動く
    • good
    • 0
この回答へのお礼

無事完成させることができました!
頓珍漢な質問に、繰り返し丁寧にお教え頂き有難うございました

>int型は値型だから
なるほど…メソッドの基本から学びなおして来たいと思います
有難うございました

お礼日時:2008/07/22 15:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!