• ベストアンサー

このプログラムのどこがいけないかの指摘をお願いします!

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になります。 どこがいけないかわかるかたご指摘の程をお願いします。 (幅の都合上左よりですが実際のプログラムをきちんとスペースが入っています。)

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

>((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)のようにすればいいでしょう。

hitoshi1010
質問者

お礼

「^」は乗数の意味にならないんでですね。知りませんでした。ありがとうございます!

その他の回答 (3)

回答No.4

もう答えが出ているようなので、少しおまけのアドバイスを。 >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)
hitoshi1010
質問者

お礼

へ~そういう書き方もあるんですね!勉強になりました!

  • 0grin
  • ベストアンサー率18% (10/53)
回答No.3

x^2はORです。 Math.powのpow(x, y)を使ってみたら? #pow(x, y) returns the x raised #to the yth power.

参考URL:
http://www.cafeaulait.org/course/week4/38.html
hitoshi1010
質問者

補足

Math.powのpow(x, y) の使い方を、もう少し詳しく説明してもらえませんか?

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

こんばんは 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 ) ; で良いと思います。

hitoshi1010
質問者

お礼

なるほど!別に括弧はいらないんですね。

関連するQ&A