0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

for文、while文を使って演習(ユークリッド互除法)

Posted at

問題

入力値1と入力値2の最大公約数を表すための文字列を返却して出力してください。

public static void main(String[] args) {
	System.out.println(euclideanAlgorithm(252,105));
}
		
public static String euclideanAlgorithm(int num1, int num2) {
		System.out.println("入力値1 : " + num1);
		System.out.println("入力値2 : " + num2);

		int a = 0;//二値交換のための退避領域
		if ((num1 < num2) || (num2 == 0)) {
			a = num1;
			num1 = num2;
			num2 = a;
		}
        //※
		for (int i = 1; i != 0; ) {
			i = num1 % num2;
			num1 = num2;
			num2 = i;
		}
		return "最大公約数 : " + num1;
}

//演算結果
//入力値1 : 252
//入力値2 : 105
//最大公約数 : 21

補足

  • 入力値の大小関係やゼロ除算のケアをif文で行った。
  • 2つの値を同時に入れ替えることができないので、一旦退避するための変数aを用意。(二値交換)
  • 継続する条件を先に書く。(前判定)
    →今回はカウンタのインクリメント処理を書かないものだった。(それでも動くのね!)

上記ソースコードの※以降while文にしたもの↓

        int i = 1;
		while (i != 0) {
			i = num1 % num2;
			num1 = num2;
			num2 = i;
		}	
		return "最大公約数 : " + num1;
//演算結果
//入力値1 : 252
//入力値2 : 105
//最大公約数 : 21

補足2

  • for文同様、継続する条件を先に書く。(前判定)
  • ループカウンタのインクリメント処理は最後に書くので特に注意!
    →講師の方曰く、無限のループは冗談抜きでマズいとのこと。(あえて無限ループをさせる処理もあるらしいが)
  • while文の場合、カウンタの変数をブロックの外で定義する必要がある。
    →つまり既に定義されている変数を継続条件に使用する際にwhile文を使うことが多らしい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?