บทความนี้จะพิจารณา (และในขอบเขตที่มากขึ้น จัดให้มีการวิเคราะห์โดยอิสระ) ปัญหาที่เกี่ยวข้องกับอาร์เรย์ เราจะพัฒนาทักษะของเราในด้านต่อไปนี้:
ปัญหาเกี่ยวกับอาร์เรย์หนึ่งมิติ
ดำเนินการต่อตามลำดับ
ในชุดงานนี้ คุณจะต้อง:- กำหนดรูปแบบตามลำดับตัวเลขนี้หรือลำดับนั้น
- เขียนฟังก์ชันที่สร้างองค์ประกอบ 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();
}
}
}
จากการดำเนินการตามวิธีการหลัก ผลลัพธ์ต่อไปนี้จะถูกส่งไปยังคอนโซล:
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