【Java】配列の偶数・奇数を2つのリストに分割する方法を解説
Javaでは、剰余演算子「%」を使って数値の偶数・奇数を判定することで、配列やリストの要素を2つの異なるリストに簡単に振り分けることができます。本記事では、ユーザーから入力された整数を偶数と奇数に分類し、それぞれ別の配列に格納して出力するプログラムの実装方法を、サンプルコードとともに詳しく解説します。
サンプルコード
以下のコードは、標準入力から整数を読み込み、偶数と奇数をそれぞれ別の配列に振り分けるプログラムです。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int n, j = 0, k = 0;
Scanner s = new Scanner(System.in);
System.out.print("必要な要素数を入力してください:");
n = s.nextInt();
int myArr[] = new int[n]; // 元の配列
int oddVals[] = new int[n]; // 奇数を格納する配列
int evenVals[] = new int[n]; // 偶数を格納する配列
System.out.println("配列の要素を入力してください:");
for (int i = 0; i < n; i++) {
myArr[i] = s.nextInt();
}
// 剰余演算で偶数・奇数を判定し、それぞれの配列へ振り分ける
for (int i = 0; i < n; i++) {
if (myArr[i] % 2 != 0) {
oddVals[j] = myArr[i];
j++;
} else {
evenVals[k] = myArr[i];
k++;
}
}
// 奇数の一覧を表示
System.out.print("配列内の奇数:");
if (j > 0) {
for (int i = 0; i < j; i++) {
System.out.print(oddVals[i]);
if (i < j - 1) {
System.out.print(", ");
}
}
System.out.println();
} else {
System.out.println("奇数は存在しません。");
}
// 偶数の一覧を表示
System.out.print("配列内の偶数:");
if (k > 0) {
for (int i = 0; i < k; i++) {
System.out.print(evenVals[i]);
if (i < k - 1) {
System.out.print(", ");
}
}
System.out.println();
} else {
System.out.println("偶数は存在しません。");
}
}
}
実行結果
コンソールに「5」と要素数を入力し、続いて「1 2 4 6 9」を入力した場合の実行結果は以下の通りです。
必要な要素数を入力してください:5 配列の要素を入力してください: 1 2 4 6 9 配列内の奇数:1, 9 配列内の偶数:2, 4, 6
コードの解説
Demo クラスの main メソッドがプログラムのエントリーポイントです。まず Scanner を使ってユーザーから要素数 n を受け取り、元のデータを保持する myArr、奇数を格納する oddVals、偶数を格納する evenVals の3つの int 型配列を宣言しています。
続いて for ループで配列の各要素を走査し、条件式「myArr[i] % 2 != 0」で判定を行います。これは「その数を2で割った余りが0でないか」を確認する式で、余りが0以外なら奇数として oddVals に、0なら偶数として evenVals に格納されます。変数 j と k は、それぞれの配列内の次の書き込み位置を示すインデックスカウンタとして機能します。
振り分けが完了すると、j と k の値から奇数・偶数の個数がわかるため、要素が1つ以上存在すれば内容を表示し、存在しない場合はその旨のメッセージを出力します。なお、Javaの剰余演算は負の数に対しても正しく機能する(例:-3 % 2 は -1)ため、このコードは負の整数も適切に分類できる点もメリットです。
処理の流れまとめ
- ユーザーから要素数と整数値を入力として受け取る
- 各要素に対して「2で割った余り」を計算し、偶数か奇数かを判定する
- 奇数は
oddValsへ、偶数はevenValsへそれぞれ格納する - 両配列の中身をコンソールに出力する
応用:Stream APIを使った簡潔な実装
Java 8 以降では、Stream API の Collectors.partitioningBy を使うことで、同じ処理をより簡潔に記述できます。
import java.util.*;
import java.util.stream.Collectors;
public class DemoStream {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 4, 6, 9);
Map<Boolean, List<Integer>> result = numbers.stream()
.collect(Collectors.partitioningBy(num -> num % 2 == 0));
List<Integer> evens = result.get(true); // 偶数のリスト
List<Integer> odds = result.get(false); // 奇数のリスト
System.out.println("偶数:" + evens); // [2, 4, 6]
System.out.println("奇数:" + odds); // [1, 9]
}
}
partitioningBy は、指定した条件(ここでは「2で割った余りが0であること」)が true になる要素と false になる要素を、自動的に2つのグループへ分類してくれるメソッドです。結果のマップでは、キーが true のエントリーに偶数のリスト、false のエントリーに奇数のリストが格納されます。ループやカウンタ変数を自分で管理する必要がないため、可読性の高いコードになります。
まとめ
配列の要素を偶数と奇数に分割する基本は、「% 2」による剰余演算での判定と、2つの配列への振り分け処理です。初心者には for ループを使ったシンプルな実装が理解しやすく、実務では Stream API を活用することでより簡潔に記述できます。用途に応じて両者の使い分けを覚えておくと良いでしょう。
-
Pythonでリスト内の偶数と奇数を2つの異なるリストに振り分ける方法
Pythonでは、1つのリストに含まれる偶数と奇数を、それぞれ別のリストへ分けて格納することができます。最もシンプルな方法は、空のリストを2つ用意し、剰余演算子(%)を使って各要素が偶数か奇数かを判定しながら振り分けていくアプローチです。以下に具体的な実装例を示します。サンプルコードdef split_list(my_list): even_list = [] odd_list = [] for i in my_list: if (i % 2 == 0): even_list.append(i) else:
-
【Python入門】偶数と奇数の要素を2つのリストに分割する方法
この記事では、ユーザーが入力したリスト(偶数と奇数が混在した要素を含む)を、偶数のみのリストと奇数のみのリストという2つの異なるリストに分割するPythonプログラムを紹介します。 リスト内の各要素を2で割った余りを判定することで、偶数か奇数かを簡単に見分けることができます。これはPythonの条件分岐とループ処理を学ぶのに最適な例題です。 実行例 Input: [1, 2, 3, 4, 5, 9, 8, 6] Output Even lists: [2, 4, 8, 6] Odd lists: [1, 3, 5, 9] アルゴリズム プログラムの流れは以下のステップで構成されています。