本文將考慮(並且在更大程度上提供獨立分析)涉及數組的問題。我們將在以下方面提高我們的技能:
對於所有問題,我們將使用整數數組。
涉及一維數組的問題
繼續序列
在這一系列任務中,您將需要:- 確定形成這個或那個數字序列的模式。
- 編寫一個函數,將給定序列的前 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 中。實作演算法:- 冒泡排序;
- 選擇排序;
- 插入排序;
- 合併排序。
涉及二維數組的問題
畫一個矩陣
在接下來的一系列任務中,需要繪製(輸出到控制台)以某種方式組成的二維數組(矩陣):它們必須對應於任務指定的模式。讓我舉一個例子。我們需要建構並顯示一個以下形式的矩陣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
例如,讓我們找出第三行中負元素的數量:
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
; - 所有對角線元素(從左上角開始);
- 所有對角線元素(從左下角開始)。
海戰
最後一部分帶星號:沒有提示或範例。矩陣是海戰遊戲程式設計的理想選擇。遊戲的編程階段之一是將船隻放置在比賽場地上。如果你解決了一些這樣的問題,那麼你就可以放心地應對海戰了。因此,給定一個由零組成的 10x10 矩陣。假設這是一個進行海戰的場地。在此欄位中,0 是空單元格,1 是一艘船或船的一部分。編寫函數,每個函數依照海戰遊戲的規則,隨機放置:- 10艘單甲板船;
- 10個雙層珊瑚;
- 5艘三層甲板船;
- 安排海戰比賽的所有船艦(4艘單甲板、3艘雙層、2艘三甲板、1艘四甲板)。
GO TO FULL VERSION