Tips

【Java】プログラム作成練習問題33

【Java】プログラム作成練習問題33

プログラム作成練習問題33回となります。

※この出題形式に関しては答えは1つではありません。
解答例はできるだけ複数載せるつもりですが、問題文の要件を満たしていれば正解として下さい。

問題

3桁の数値の中で、同じ数字が含まれているか判定するプログラム
例) 123 → 同じ数字は含まれていません
121 → 同じ数字が含まれています

解答例1
public class Excercise_033 {
	public static void main(String[] args) {
		int num = 121;
		String strNum = String.valueOf(num);

		String result = "同じ数字は含まれていません";

		outerFor: for (int i1 = 0; i1 < strNum.length() - 1; i1++) {
			for (int i2 = 1; i2 < strNum.length(); i2++) {
				if (i1 == i2) {
					continue;
				}
				if (strNum.charAt(i1) == strNum.charAt(i2)) {
					result = "同じ数字が含まれています";
					break outerFor;
				}
			}
		}
		System.out.println(result);
	}
}

解答例2
public class Excercise_033 {
	public static void main(String[] args) {
		int num = 121;
		String strNum = "" + num;

		if (strNum.charAt(0) == strNum.charAt(1) ||
			strNum.charAt(0) == strNum.charAt(2) ||
			strNum.charAt(1) == strNum.charAt(2)) {
			System.out.println("同じ数字が含まれています");
		} else {
			System.out.println("同じ数字は含まれていません");
		}
	}
}

三桁であれば全てのパターンを書き出してしまうという手があります。
しかし桁数が増えると対応が難しくなります。


間違い例

public class Excercise_033 {
	public static void main(String[] args) {
		int num = 123;
		String strNum = String.valueOf(num);

		String result = "同じ数字は含まれていません";

		outerFor: for (int i1 = 0; i1 < strNum.length() - 1; i1++) {
			for (int i2 = 1; i2 < strNum.length(); i2++) {
				if (strNum.charAt(i1) == strNum.charAt(i2)) {
					result = "同じ数字が含まれています";
					break outerFor;
				}
			}
		}
		System.out.println(result);
	}
}

解答例1の間違いになります。
1で書いていたcontinueの処理がないと、同じインデックスの文字を判定してしまい、必ず同じ文字が含まれる結果になってしまいます。


新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search