- ベストアンサー
このプログラムのどこがいけないかの指摘をお願いします!
import java.io.*; public class ex32h_1{ public static void main(String args[]) throws Exception{ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.print("x="); int x=(new Integer(in.readLine())).intValue(); System.out.print("y="); int y=(new Integer(in.readLine())).intValue(); System.out.print("z="); int z=(new Integer(in.readLine())).intValue(); boolean result= (x*y*z==0) && ((x^2+y^2)!=0) && ((y^2+z^2)!=0) && ((x^2+z^2)!=0); System.out.println("0は一つ?;"+result); } } x,y,zに0が一つだけあるかどうかを調べるというものです。x=0,y=1,z=1(0,1,1)の組み合わせのときはなぜかfalseになってしまいます。他のとき(0,1,2)のときなどはきちんとtrueになります。 どこがいけないかわかるかたご指摘の程をお願いします。 (幅の都合上左よりですが実際のプログラムをきちんとスペースが入っています。)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>((x^2+y^2)!=0) && ((y^2+z^2)!=0) && ((x^2+z^2)!=0); ここで「^」を乗数の意味で使っているようですが、 Javaでは(Cでも)、「^」は乗数の意味になりません。 「ビット排他的論理和演算子」という別のものになります。 乗数の演算子は存在しないので、 ((x^2+y^2)!=0)を((x*x+y*y)!=0)のようにすればいいでしょう。
その他の回答 (3)
- mulukhiyya
- ベストアンサー率54% (12/22)
もう答えが出ているようなので、少しおまけのアドバイスを。 >int x=(new Integer(in.readLine())).intValue(); これには少し無駄があるので、 >int x=Integer.parseInt(in.readLine()); という正攻法になおしてみてはいかが。
- 参考URL:
- http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Integer.html#parseInt(java.lang.String)
お礼
へ~そういう書き方もあるんですね!勉強になりました!
- 0grin
- ベストアンサー率18% (10/53)
x^2はORです。 Math.powのpow(x, y)を使ってみたら? #pow(x, y) returns the x raised #to the yth power.
補足
Math.powのpow(x, y) の使い方を、もう少し詳しく説明してもらえませんか?
- arukamun
- ベストアンサー率35% (842/2394)
こんばんは boolean result= (x*y*z==0) && ((x^2+y^2)!=0) && ((y^2+z^2)!=0) && ((x^2+z^2)!=0); ここがまずいですね。 boolean result= (x*y*z==0) && ((x*x+y*y)!=0) && ((y*y+z*z)!=0) && ((x*x+z*z)!=0); にしましょう。 また、&&でつなぐのであれば、括弧は余計ですね。 boolean result= ( x*y*z==0 && x*x+y*y!=0 && y*y+z*z!=0 && x*x+z*z!=0 ) ; で良いと思います。
お礼
なるほど!別に括弧はいらないんですね。
お礼
「^」は乗数の意味にならないんでですね。知りませんでした。ありがとうございます!