「覚え間違い」を教えてください!

学校の課題で電卓を作っています。
dentaku.BOはabstractではなく、java.awtevent.ActionListener内の abstractメソッド actionPerformed(java.awt.event.ActionEvent) をオーバーライドしません

というエラーと、


互換性のない型
検出値:java.lang.String
期待値:boolean
if(fugo="+")
^


と、


演算子 - はjava.lang.String,java.lang.String に適応出来ません

str= num1-num2;
^

この3種類のエラーはざくざく出てくるのですが、具体的にどう修正したらいいのか分かりません。どなたか教えてくださいm(_ _)m
ソース載せようとしたら文字数オーバーしてしまいましたorz

A 回答 (6件)

#1です。


> kekka= num1+num2;
> Integer.toString(kekka); //kekkaをStringに変換
> str = kekka;
> 検出値:int 期待値:~String で出てきてしまって

#1の補足について回答しようと思いましたが
#3の方が回答していましたね。
str = kekka;
ここで指定しているkekkaはint型だからString型にはいれられません。
えい、おまけだぁ。
str = Integer.toString(kekka); //kekkaをStringに変換
    • good
    • 0

専門家に突っ込むのもちょっとアレかと思いつつ:


C/C++ ならともかく, Java では「条件式が必要なところで比較と間違えて代入を書く」とほとんどの場合にエラーになります. だから, あんまり
1==a のように書く
必要性はありません. ただし間違っていてしかもエラーにならないときは盛大なバグのもとになるのでそれはそれで要注意です.
とはいえ, この比較って「不自然」だよなぁ.
む, 「演算子 - はjava.lang.String,java.lang.String に適応出来ません」ってメッセージも (本当なら) おそらく誤訳. 意味としては adopt じゃなくて apply なので, 「適応」ではなく「適用」のはずだ.
    • good
    • 0

> if(fugo="+")


の部分についてです。

他の方からのアドバイスで if(fugo.equals("+")) に修正されたようなので良いですが・・・。

if(fugo="+") というのは比較ではなく、「変数fugoに"+"を代入する」という代入演算子です。
2つのものが同じかどうか比較するための演算子は == です。

仮に変数aがint値だったとすると if(a==1) と記述しなければなりません。
些細な記述の違いですが、仕事でJavaのコーディングをしている人間でもたまに記述ミスをして、これがなかなか厄介なバグになることもあるので今後は注意して下さいね。

もし比較演算子を使うことがあれば、

if(1==a)

と書くのも1つの予防策になります。
[(1=a)と書き間違えても、数値に変数は代入できないのでコンパイルエラーが発生します。]
    • good
    • 0

> 修正前はvoid actionPerformed(ActionEvent e)ってなってたんですが、略(?)したのがいけなかったのか・・・?



パッケージ名を略してActionEventとだけ書くなら、前のほうに
import java.awt.event.ActionEvent;
とか
import java.awt.event.*;
と予め書いておく必要があります。
修正前は「ActionEventというクラスが見つからない」という意味のエラーが出ていませんでしたか?

> Integer.toString(kekka); //kekkaをStringに変換
> str = kekka;

上のコードでは、toString()の返り値(= String型への変換結果)を使わずに捨ててしまっています。返り値を捨てずに変数strに代入してください。
toString()を実行しても、kekkaという変数の型がStringに変わるわけではありません。
    • good
    • 0

> dentaku.BOはabstractではなく、java.awtevent.ActionListener内の abstractメソッド actionPerformed(java.awt.event.ActionEvent) をオーバーライドしません



dentaku.BOクラスの定義に implements ActionListener と書いてあるのだろうと思われます。
- もし必要がないのであれば、dentaku.BOクラスの定義から implements ActionListener を消してしまってください。
- ActionListenerをimplementsする必要があるのであれば、dentaku.BOクラスの中で、void actionPerformed(java.awt.event.ActionEvent)という型のメソッドを自分で定義しましょう。
    • good
    • 0
この回答へのお礼

エラーがなくなりました。丁寧な指示、ありがとうございます!
implements ActionListener は残したまま、void actionPerformed(java.awt.event.ActionEvent)を追加しました。修正前はvoid actionPerformed(ActionEvent e)ってなってたんですが、略(?)したのがいけなかったのか・・・?

お礼日時:2009/05/17 22:13

回答じゃなくてヒントのみ。


> 検出値:java.lang.String
> 期待値:boolean
> if(fugo="+")
『if()の中はboolean値を期待しているのに、String値がはいってるよ。』
fugoはString型でしょうか?
Stringの比較はequals()メソッドを使えばいいよ。

> str= num1-num2;
『演算子 - の結果はStringにいれられないよ。』
strはString型でしょうか?
strをnum1、num2と同じ型にするか、
結果をString型に変換してからstrにいれればいいよ。

この回答への補足

equalメソッドを使って、

if(fugo.equals("+")){
//fugoが+だった時num1とnum2を足す
kekka= num1+num2;
Integer.toString(kekka); //kekkaをStringに変換
str = kekka;}

こんな感じにしたらfugo=+の問題は解決しました。ありがとうございますm(_ _)m
ですが、その後も互換性のない型のエラーが
検出値:int 期待値:~String で出てきてしまって、toString()を使ってみたんですが、うまくいかず…。どの辺が間違っているのでしょうか? 

補足日時:2009/05/17 21:37
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報