• 締切済み

javaのswingについて質問です。

1桁の演算をする簡単な電卓を書いてみたのですが。。。分からない所だけ少し抜粋しました。見て下さい。 class SampleKeyListener extends KeyAdapter { public void keyPressed(KeyEvent e) { if(flag==false){    //ここで演算子の処理を.....1 char key=e.getKeyChar(); switch(key){ case '-': lb1.setText("引き算をします。数字を入力して下さい。");lb2.setText(str);lb3.setText("-"); now="minus";break; case '+': lb1.setText("足し算をします。数字を入力して下さい。");lb2.setText(str);lb3.setText("+"); now="plus";break; case '*': lb1.setText("かけ算をします。数字を入力して下さい。");lb2.setText(str);lb3.setText("*"); now="kakeru";break; case '%': lb1.setText("割り算をします。数字を入力して下さい。");lb2.setText(str);lb3.setText("%"); now="waru";break; } } if(flag==true){   //ここから数字の処理を(1桁のみ)....2 int k=e.getKeyCode(); switch(k){ case KeyEvent.VK_0: str="0";if(now=="plus"){ sum=sum+0; } else if(now=="minus"){ sum=sum-0; } else if(now=="kakeru"){ sum=sum*0; } else if(now=="waru"){ sum=sum/0; } else{ sum=0; } flag=false;break; //以下9まで同じ処理をします。(数値だけ変更しますが) } b2.setText(str); lb3.setText(Integer.toString(sum)); } .... ここで数値と演算しを交互に入力させて、どちらかを続けて入力するとエラーをはくしくみにしたいのですが、最初の考えはint count=0;などをつくりメソッドが呼び出された回数を数え上のメモの1、2、を切り替えてswitch文の条件にないものを入力したときはエラーをという考えでした。しかしそうしてしまうと演算子のほうで乗算記号と8が自分のPCでは同じキー(乗算の演算子のときはshiftキーを押します)なのですが、乗算のときに乗算とともに8も反応してしまい結果がおかしくなるのと演算子と数字を交互に入力させる制限もうまくいきませんでした。そこで上の様にbooleanでフラグを作true,falseで分岐させると乗算演算子のときに8は反応しなくなったのですが(入力の制限もできています)みてお分かりになるように、数字の入力→演算子の入力でとまってしまいます。flagをfalseからtrueに変えるのをそれぞれの演算子の方のswitch文にいれるとこんどはまた8が反応してしまうのと入力制限ができないです。どこにflagの切り替えをまたはどのようにしたらうまくできるでしょうか

みんなの回答

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

コードは詳しく見ていませんが、とりあえず気がついた点だけ。 1.演算子の取得と数字の取得で違うメソッドを使っている。   (getKeyChar()とgetKeyCode()) 2.数字の処理内で文字列の比較を==で行っている。   × str="0";if(now=="plus"){   ○ str="0";if(now.equals("plus")){ 以上、返事があるか怪しいので、簡単に書きました。

関連するQ&A