この記事では、配列に関連する問題を検討します (そして、より広範囲に独立した分析を提供します)。私たちは次の分野でスキルを向上させます。
1次元配列に関する問題
シーケンスを続行する
この一連のタスクでは、次のことを行う必要があります。- 特定の数値シーケンスが形成されるパターンを決定します。
- 指定されたシーケンスの最初の N 要素を整数配列として形成し、配列要素を画面に表示する関数を作成します。
1, 2, 3, 4, 5…
ステップ 1: パターンを特定します。ここにあるものはすべて基本的なものであり、一連の自然数です。ステップ 2: 指定された行の最初の N 要素を配列として形成する関数を作成します。
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(createArrayOfIntegers(10)));
// Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
public static int[] createArrayOfIntegers(int n) {
int[] array = new int[n];
for (int i = 1; i <= n; i++) {
array[i-1] = i;
}
return array;
}
}
同様に、次のシーケンスを継続する関数を記述する必要があります。
A. 2, 4, 6, 8, 10...
B. 1, 3, 5, 7, 9...
C. 1, 4, 9, 16, 25...
D. 1, 8, 27, 64, 125...
E. 1, -1, 1, -1, 1, -1...
F. 1, -2, 3, -4, 5, -6...
G. 1, -4, 9, -16, 25....
H. 1, 0, 2, 0, 3, 0, 4....
I. 1, 2, 6, 24, 120, 720...
J. 1, 1, 2, 3, 5, 8, 13, 21…
要素の検索
この一連のタスクでは、完成した配列内でいくつかのプロパティを持つ要素を見つける必要があります。たとえば、最大値を持つ要素です。これを実証するために、配列を取得し、配列内の最大要素のインデックスを決定し、この要素をそのインデックスとともにコンソールに出力する関数のコードを作成してみましょう。java.util.concurrent.ThreadLocalRandom
また、このクラスを使用して、ランダムな要素で構成される指定された長さの整数配列を迅速に生成する 方法も示します。
public class Main {
public static void main(String[] args) {
int[] array = generateRandomIntArray(10);
findMax(array);
/*
Output:
Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
Max element is [1822778873] with index [3]
*/
}
public static int[] generateRandomIntArray(int n) {
int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
System.out.println("Generated random array: " + Arrays.toString(array));
return array;
}
public static void findMax(int[] array) {
int maxIndex = 0;
int max = array[maxIndex];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
maxIndex = i;
}
}
System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
}
}
さて、タスク自体です。ランダムな整数要素の配列から次のものを見つける必要があります。
- 最大。
- 最小。
- 平均。
- 最大要素と最小要素の間の要素の数。
- 最初の素数。
- 最後の素数。
- 配列内の素数の数。
仕分け
この一連の問題では、さまざまな並べ替えアルゴリズムを使用して整数要素の配列を並べ替える必要があります。インターネット上には、さまざまなアルゴリズムに関する資料が数多くあります。まずはアルゴリズムの本質を理解してから、自分で実装してみてください。最初は紙(ブロック図、疑似コードなど、自分に合ったもの)で作成し、次に IDEA で作成します。実装のためのアルゴリズム:- バブルソート;
- 選択の並べ替え;
- 挿入ソート;
- マージソート。
2次元配列に関する問題
マトリックスを描く
次の一連のタスクでは、特定の方法で構成された 2 次元配列 (行列) を描画する (コンソールに出力する) 必要があります。それらは、タスクで指定されたパターンに対応する必要があります。例を挙げてみましょう。次の形式の行列m*n
(m
は行数、n
は行内の要素の数) を構築して表示する必要があります。
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
すべてを行ってくれる関数を作成し、マトリックスをコンソールに美しく出力する関数も提供しましょう (便利だと思われるかもしれません)。
public class Main {
public static void main(String[] args) {
createAndDrawMatrix(3, 4);
}
public static void createAndDrawMatrix(int m, int n) {
int[][] matrix = new int[m][n];
int value = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = value;
value ++;
}
}
printMatrix(matrix);
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%3d", anInt));
}
System.out.println();
}
}
}
m*n
現在のタスク: 次の形式の 行列を表示します。 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1
要素の検索
このセクションでは、行列のさまざまな部分 (特定の列または特定の行) でさまざまな要素の検索を実装する必要があります。次の形式の行列があると仮定します。 -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35
例として、3 行目の負の要素の数を見つけてみましょう。
public class Main {
public static void main(String[] args) {
int [][] matrix = {
{ -1, 2, -3, 4, -5, 6, -7},
{ 8, -9, 10, -11, 12, -13, 14},
{-15, 16, -17, 18, -19, 20, -21},
{ 22, -23, 24, -25, 26, -27, 28},
{-29, 30, -31, 32, -33, 34, -35}
};
findNegativeCountInRow(matrix, 3);
}
private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
int negativeCount = 0;
for (int element : matrix[rowNumber]){
if (element < 0) {
negativeCount ++;
}
}
System.out.println("Matrix: ");
printMatrix(matrix);
System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%5d", anInt));
}
System.out.println();
}
}
}
main メソッドを実行した結果、コンソールに次のように出力されます。
Matrix:
-1 2 -3 4 -5 6 -7
8 -9 10 -11 12 -13 14
-15 16 -17 18 -19 20 -21
22 -23 24 -25 26 -27 28
-29 30 -31 32 -33 34 -35
Has 3 negative elements in #3 row
さて、タスクです。奇数の場合は、次の形式の n
行列を出力します。n*n
1, -2, 3,
-4, 5, -6,
7, -8, 9
この行列から次を導き出します。
- すべての否定的な要素。
- 文字列内のすべての負の要素
i
。 - 列内のすべての負の要素
j
。 - すべての対角要素 (左上隅から開始)。
- すべての対角要素 (左下隅から開始)。
海戦
アスタリスクの付いた最後のセクション: ヒントや例はありません。マトリックスは海戦ゲームのプログラミングに最適です。このゲームのプログラミング段階の 1 つは、フィールド上に船を配置することです。これらの問題をいくつか解決すれば、海戦にも対処できるようになるのでご安心ください。つまり、ゼロで構成される 10x10 行列があるとします。海戦をプレイするためのフィールドだと仮定しましょう。このフィールドでは、0 は空のセル、1 は船または船の一部です。海戦ゲームのルールに従って関数をランダムに配置します。- 単層デッキ船 10 隻。
- ダブルデッキコーバル10個。
- 3階建て船5隻。
- 海戦ゲーム用にすべての船を手配します (シングルデッキ 4 隻、ダブルデッキ 3 隻、3 デッキ 2 隻、4 デッキ 1 隻)。
GO TO FULL VERSION