ネストされたループを使った重複要素の検出
このステップでは、Java でネストされたループを使用して配列内の重複要素を見つける基本的なアプローチを探索します。この方法は直感的で理解しやすいため、配列操作と基本的なアルゴリズム設計の学習の良い出発点となります。
まず、~/project
ディレクトリに FindDuplicatesNested.java
という名前の新しい Java ファイルを作成しましょう。WebIDE のファイルエクスプローラーで project
フォルダを右クリックし、「新しいファイル」を選択して名前を入力することで直接作成できます。
次に、コードエディターで FindDuplicatesNested.java
ファイルを開き、以下の Java コードを追加します。
public class FindDuplicatesNested {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 2, 7, 8, 8, 3};
System.out.println("Finding duplicate elements using nested loops:");
// Use nested loops to compare each element with every other element
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
// If a duplicate is found (elements are equal and not the same element)
if (numbers[i] == numbers[j]) {
System.out.println("Duplicate found: " + numbers[j]);
}
}
}
}
}
このコードを分解して説明しましょう。
int[] numbers = {1, 2, 3, 4, 2, 7, 8, 8, 3};
:この行は numbers
という名前の整数配列を宣言し、重複要素を含むいくつかの値で初期化します。
for (int i = 0; i < numbers.length; i++)
:これは外側のループです。インデックス i
を使用して配列の各要素を反復処理します。
for (int j = i + 1; j < numbers.length; j++)
:これは内側のループです。インデックス i
の各要素に対して、インデックス i
の次の要素から始まる配列の「残りの」要素を反復処理します。これは、要素を自身と比較することを避け、同じ重複要素のペアを 2 回見つけることを避けるために重要です(例えば、インデックス 1 とインデックス 4 を比較し、その後インデックス 4 とインデックス 1 を比較することを避けます)。
if (numbers[i] == numbers[j])
:この条件は、インデックス i
の要素がインデックス j
の要素と等しいかどうかをチェックします。もし等しければ、重複要素を見つけたことになります。
System.out.println("Duplicate found: " + numbers[j]);
:重複要素が見つかった場合、この行は重複要素を示すメッセージを出力します。
Ctrl + S
(macOS では Cmd + S
)を押してファイルを保存します。
次に、WebIDE の下部にあるターミナルを開きます。~/project
ディレクトリにいることを確認してください。pwd
と入力して Enter キーを押すことで確認できます。出力は /home/labex/project
である必要があります。
javac
コマンドを使用して Java コードをコンパイルします。
javac FindDuplicatesNested.java
エラーがなければ、コンパイルは成功し、~/project
ディレクトリに FindDuplicatesNested.class
ファイルが作成されます。ls
と入力して Enter キーを押すことで確認できます。
最後に、java
コマンドを使用してコンパイルされた Java プログラムを実行します。
java FindDuplicatesNested
プログラムによって見つかった重複要素を示す出力が表示されるはずです。
このネストされたループのアプローチは、配列内のすべての可能な要素のペアを比較することで機能します。理解しやすい一方で、非常に大きな配列に対しては非効率になる可能性があります。次のステップでは、重複要素を見つけるより効率的な方法を探索します。