- ベストアンサー
【Java初心者】最大公約数と最小公倍数を求めるプログラムでエラーが発生する
- java初心者が最大公約数と最小公倍数を求めるプログラムを作成しましたが、実行時にエラーが発生します。
- エラーメッセージは「Exception in thread 'main' java.lang.ArithmeticException: / by zero」で、原因が分かりません。
- どなたか解る方がいらっしゃいましたら、助けていただけないでしょうか。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
N04 さんの書かれた ものでいいですが、 あえて、質問者さんの意図をくめば 最小公倍数は 元の数字の積を最大公約数で割った数だから public int getGCD() { return (aa*bb)/getLCM(); } って定義すればいいわけです。
その他の回答 (7)
- Tacosan
- ベストアンサー率23% (3656/15482)
「掛けてから割る」よりも「割ってから掛ける」方が安全かな. ど~でもいいかもしれんけど.
お礼
ヒントをありがとうございました。 参考にさせて頂きます。
- jjon-com
- ベストアンサー率61% (1599/2592)
> 最小公倍数は 元の数字の積を最大公約数で割った数 がーん,知らなかった… http://homepage1.nifty.com/moritake/sansu/6/05baisu-yakusu.htm 私にとって回答した以上の収穫でした,ありがとうございます。
- eclipse2maven
- ベストアンサー率32% (33/101)
No5 の 差し替えは、 No4 さんのコードにたいしてです。
- jjon-com
- ベストアンサー率61% (1599/2592)
ideone参照だけじゃなくソースを載せることにしました。 class Pair_PositiveNumber { private int aa, bb; Pair_PositiveNumber(int x, int y) { if (x <= 0) { x = 1; } if (y <= 0) { y = 1; } if (x > y) { aa = x; bb = y; } else { aa = y; bb = x; } } public int getLCM() { int a = aa, b = bb, r; while (b > 0) { r = a % b; a = b; b = r; } return a; } public int getGCD() { int a = aa, b = bb; while (a != b) { if (a > b) { b += bb; } else { a += aa; } } return a; } } class Q7633163 { public static void main(String[] args) { int a = 8; int b = 12; Pair_PositiveNumber pair = new Pair_PositiveNumber(a, b); System.out.println("LCM = " + pair.getLCM()); System.out.println("GCD = " + pair.getGCD()); } }
お礼
わざわざソースまで書き出して下さったことに本当にありがとうございました。 引き続き勉強すると共に参考にさせて頂きます。
補足
ソースまで御呈示頂いて感謝いたします。 自分で書いていて本当に迷子になってしまいました。 最大公約数と最小公倍数の継承になぜ?という部分なのですが、自分でもよく解らずに教科書の問いに挑戦した次第でございます。 さらに、キーボード入力による出力表示も上乗せで出題されていてパニック状態です。。。
- jjon-com
- ベストアンサー率61% (1599/2592)
最大公約数と最小公倍数の関係が「なんで継承?」(ANo.2) という意見に私も賛成。 http://ideone.com/XCUh3
- eclipse2maven
- ベストアンサー率32% (33/101)
なんかめちゃくちゃですね。 i = (x * y) /r; の r なにも意味をなしません。 なんで、継承する必要が???
お礼
めちゃくちゃなソースに対してのアドバイス感謝します。 ありがとうございました。
補足
なにがどうめちゃくちゃなのかさえ分からないくらいど素人な故に本当に申し訳ございません・・・。
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 私もJavaは詳しくありませんが、実行してみました。 結果) 1st?8 2nd?24 Exception in thread "main" java.lang.ArithmeticException: / by zero at LcmGcm.<init>(sample.java:22) at sample.main(sample.java:37) ここで1行目のエラーは「0で除算した」と言う意味です。 2行目以降はエラーの発生に関連する行です。 22行目でrで割っていますが、初期化していないのが原因ではないでしょうか。 では。
お礼
お礼遅くなりました。 参考にさせて頂きました。 ありがとうございました。
補足
ここで1行目のエラーは「0で除算した」と言う意味です。 2行目以降はエラーの発生に関連する行です。 ↑ なるほど!こんなエラーは初めて見たので勉強になりました。 ありがとうございました。
補足
質問の意図を汲んでいただいて感謝します。 もう素人すぎて本当に申し訳ないのですが、御呈示頂いた定義は public int late(){ return i; } の部分を public int getGCD() { return (aa*bb)/getLCM(); } に変更するという意味合いでよろしいのでしょうか? 質問ばかりで本当に申し訳ありません。