• ベストアンサー

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

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

  • Java
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • コンパイルはできるのに・・・・

    import java.io.*; public class ex32 { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int x = (new Integer(in.readLine())).intValue(); int y = (new Integer(in.readLine())).intValue(); while(x != y) { System.out.print("int x> "); System.out.print("int y> "); if(x > y) { x = x - y; } else{ y = y - x; } } System.out.println("GCM = " + x); } } このソースで、コンパイルとdouble x >の出力まではできるのですが、 そこで数字を入力してエンターを押すと、そこから進みません。 どう直したらいいでしょうか。

    • ベストアンサー
    • Java
  • エラーの訂正でアドバイスください。

    javaプログラミング超初心者です import java.io.*; public class ex22b { public static void main(String[] arg) { System.out.print("x: "); int x = (new Integer (in.readLine())). intValue(); System.out.print("y: "); int y = (new Integer (in.readLine())). intValue(); int a; while (y > 0) { a = a + x; System.out.println("kekka = " + a); System.out.println("y = " + y); y = y - 1; } System.out.println("乗算結果は " + a); } } というソースを書いたら、コンパイルの際に シンボルを見つけられません シンボル:変数 in 場所  :ex22bのクラス int x = (new Integer (in.readLine())). intValue();            ^ int y = (new Integer (in.readLine())). intValue();            ^ というエラーが出ました。 どこをどう直したらいいのでしょうか。

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • この各行のプログラムの意味を教えてください!

    各行のプログラムがなにをしてるかちょっとわからないので誰か教えてください><お願いします! PrintWriter out=new PrintWriter(socket.getOutStream(),true); out.println("hello,World!"); BufferedReader in=new BufferedReader( new InputStreamReader(socket.getInputStream()); String result=in.readLine();

    • ベストアンサー
    • Java
  • 【初心者です】最大値の箇所

    import java.io.*; public class ex41b { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int[] a = new int[100]; int count = 0; while(count < a.length) { System.out.print(count + "> "); int v = (new Integer(in.readLine())).intValue(); if(v == 0) break; a[count] = v; ++count; } int max = a[0]; for(int i = 1; i<a.length; i++) { if(a[i]>max) max = a[i]; } System.out.println("max: " + max); System.out.println("pos: " + ****); } } このソースで、最大値と最大値が何番目かを出力したいのですが、 最後の****に何を当てはめればいいのかが分かりません。 いくつかやってみたのですが、よく分かりませんでした。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • Javaのプログラムで・・・

    Javaのプログラムで1~20までの整数乱数を実行後に指定回数だけ発生させ、そのうち何%が奇数であったかを表示するプログラムを作成中です。 乱数を発生させるところまでは行ったのですがここからどのように計算していくのかわかりません。 以下が作成したものですがアドバイスお願いします。 import java.io.*; public class Rand { public static void main(String args[]) throws IOException { System.out.print("発生させる乱数の回数は?"); BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num= Integer.parseInt(str); for(int i=1;i<=num;i++){ int a=(int)(20*Math.random()+1); System.out.println(a); } for(int a=1; a<=;a++){ if(a%2==1); System.out.println("発生した乱数の"++"%が奇数です。"); } } }

  • 入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小

    入力された入力値と最大値、最小値を表示させるプログラムで、最大値と最小値のプログラムを下記に作成してみたら最小値が0になりました。そして、もう一つ繰り返し文を作ってみたら、最大値・最小値がうまく表示されました。この違いはどうしてですか?教えてください。 import java.io.*; class Hairetu1 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("データはいくつですか?"); String str = br.readLine(); int num = Integer.parseInt(str); int a[]=new int[num]; int i; int max=0; int min=a[0]; for(i=0; i<a.length; i++){ System.out.print((i+1)+"番目は?"); str = br.readLine(); int tmp = Integer.parseInt(str); a[i] = tmp; if(max<tmp){ max=tmp; } if(min>tmp){ min=tmp; } } System.out.println("入力した値は"+test.length); System.out.println("最大は"+max); System.out.println("最小は"+min); } }

    • ベストアンサー
    • Java
  • 入力した年月日が過去か現在か未来かを表示するプログラム

    import java.util.*; import java.io.*; import java.text.*; 大事なところだけ抜粋。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int year = Integer.parseInt(br.readLine()); int month = Integer.parseInt(br.readLine()); int day = Integer.parseInt(br.readLine()); Calendar cal = Calendar.getInstance(); cal.set(year,month-1,day); Calendar today = Calendar.getInstance(); SimpleDateFormat sbf = new SimpleDateFormat("yyMMdd"); Date date1 = cal.getTime(); Date date2 = today.getTime(); String result1 = sbf.format(cal); String result2 = sbf.format(today); 問題はここからです。 入力した年月日が過去か現在か未来か調べるのに<>=は使えないですよね。 どうすればいいのでしょうか。 アドバイス、宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaで課題を出されています

    題名の通りなのですが、javaのプログラミングで課題を出されていて うまく書けません お題としては 1 if分と論理演算を使うこと。 2 forまたはwhileを使用すること 3 メソッドを使用すること。(main以外で) 4 配列を使用すること 以上なのですが、一応昔スロットプログラムを作っていたのでこれをベースに作ろうかなと考えています import java.io.*; public class Slot01{ public static void main(String[] args){ try{ //String line =reader.readLine(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("こんにちは!スロットゲームへようこそ!"); System.out.println("EnterKeyを押して当たりを出してくださいね!"); while(true){ //while文は処理を繰り返すためのものです。 // ▽これよりソースを打ち込んでください //try{ int x=(int)(Math.random()*9)+1; int y=(int)(Math.random()*9)+1; int z=(int)(Math.random()*9)+1; int[]kakuritu; int sum; System.out.print(x); System.out.print(y); System.out.print(z); System.out.println(""); String line =reader.readLine(); //System.out.println(""); if(x==7&&y==7&&z==7){ System.out.println("スーパー大当たり"); }else if(x==y&&y==z){ System.out.println("大当たり"); }else if(x==y||y==z||x==z){ System.out.println("小当たり"); }else{ System.out.println("外れ"); } }//while文の終わり }catch (IOException e){ System.out.println(e); }catch (NumberFormatException e){ System.out.println("正しい形式で表示してください。"); } } } このプログラムなのですが、1と2はこの中に入ってます。考えてみたのですが、このプログラムに当たり確率を表示させるプログラムなら3と4も満たせそうなのですが、いまいちソースが思いつきませんのでご教授お願いします。 文章おかしいところだらけで申し訳ありません。

    • ベストアンサー
    • Java

専門家に質問してみよう