Artikel ini akan mempertimbangkan (dan, pada tahap yang lebih besar, menyediakan analisis bebas) masalah yang melibatkan tatasusunan. Kami akan meningkatkan kemahiran kami dalam bidang berikut:
Masalah yang melibatkan tatasusunan satu dimensi
Teruskan urutan
Dalam siri tugasan ini anda perlu:- Tentukan corak mengikut mana urutan berangka ini atau itu terbentuk.
- Tulis fungsi yang membentuk elemen N pertama bagi jujukan yang diberikan sebagai tatasusunan integer dan memaparkan elemen tatasusunan pada skrin.
1, 2, 3, 4, 5…
Langkah 1: Kenal pasti corak. Semuanya di sini adalah asas - ia adalah siri nombor asli. Langkah 2: tulis fungsi yang akan membentuk elemen N pertama baris yang diberikan sebagai tatasusunan:
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;
}
}
Begitu juga, adalah perlu untuk menulis fungsi yang akan meneruskan urutan berikut:
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…
Cari elemen
Dalam siri tugasan ini, adalah perlu untuk mencari elemen dalam tatasusunan siap yang mempunyai beberapa sifat. Sebagai contoh, elemen dengan nilai maksimum. Untuk menunjukkan, mari tulis kod untuk fungsi yang mengambil tatasusunan dan menentukan indeks elemen maksimum dalam tatasusunan, dan kemudian mengeluarkan elemen ini bersama-sama indeksnya ke konsol. Saya juga akan menunjukkan bagaimana, menggunakan kelas,java.util.concurrent.ThreadLocalRandom
anda boleh menjana tatasusunan integer dengan panjang tertentu, yang terdiri daripada unsur rawak:
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));
}
}
Sekarang tugasan itu sendiri. Daripada tatasusunan unsur integer rawak kita perlu mencari:
- maksimum.
- Minimum.
- Purata.
- Bilangan elemen antara unsur maksimum dan minimum.
- Nombor perdana pertama.
- Nombor perdana terakhir.
- Bilangan nombor perdana dalam tatasusunan.
Menyusun
Dalam siri masalah ini, anda perlu mengisih tatasusunan elemen integer menggunakan pelbagai algoritma pengisihan. Terdapat banyak bahan di Internet mengenai pelbagai algoritma. Cuba fahami intipati algoritma dahulu, dan kemudian cuba laksanakannya sendiri. Pertama di atas kertas (rajah blok, pseudokod, apa sahaja yang sesuai dengan anda), dan kemudian dalam IDEA. Algoritma untuk pelaksanaan:- jenis gelembung;
- jenis pemilihan;
- jenis sisipan;
- merge sort.
Masalah yang melibatkan tatasusunan dua dimensi
Lukiskan matriks
Dalam siri tugasan seterusnya, adalah perlu untuk melukis (output ke konsol) tatasusunan dua dimensi (matriks) yang digubah dengan cara tertentu: mereka mesti sepadan dengan corak yang ditentukan oleh tugasan. Biar saya berikan satu contoh. Kita perlu membina dan memaparkan matriksm*n
(di mana m
bilangan baris, dan n
bilangan elemen dalam baris) borang:
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Mari tulis fungsi yang akan melakukan segala-galanya untuk kita, dan juga memberikan fungsi yang akan mengeluarkan matriks dengan indah ke konsol (anda mungkin mendapati ia berguna):
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();
}
}
}
Tugasan sekarang: Paparkan matriks m*n
borang: 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
Cari elemen
Dalam bahagian ini, adalah perlu untuk melaksanakan carian untuk pelbagai elemen dalam bahagian matriks yang berlainan: dalam lajur tertentu atau dalam baris tertentu. Mari kita anggap kita mempunyai matriks bentuk: -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
Sebagai contoh, mari kita cari bilangan unsur negatif dalam baris ketiga:
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();
}
}
}
Hasil daripada melaksanakan kaedah utama, berikut akan dikeluarkan kepada konsol:
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
Sekarang tugasan. Untuk sebarang ganjil, n
cetak matriks n*n
borang:
1, -2, 3,
-4, 5, -6,
7, -8, 9
Daripada matriks ini, terbitkan:
- semua unsur negatif;
- semua unsur negatif dalam rentetan
i
; - semua unsur negatif dalam lajur
j
; - semua elemen pepenjuru (bermula dari sudut kiri atas);
- semua elemen pepenjuru (bermula dari sudut kiri bawah).
Pertempuran laut
Bahagian terakhir dengan asterisk: tiada petua atau contoh. Matriks sesuai untuk memprogramkan permainan pertempuran laut. Salah satu peringkat pengaturcaraan permainan ini ialah penempatan kapal di padang permainan. Jika anda menyelesaikan beberapa masalah ini, yakinlah bahawa anda akan dapat menghadapi pertempuran laut. Jadi, diberi matriks 10x10 yang terdiri daripada sifar. Mari kita anggap bahawa ia adalah medan untuk bermain pertempuran laut. Dalam medan ini, 0 ialah sel kosong, 1 ialah kapal atau sebahagian daripada kapal. Tulis fungsi, setiap satunya, mengikut peraturan permainan pertempuran laut, meletakkannya secara rawak:- 10 kapal satu dek;
- 10 biji kobal dua dek;
- 5 kapal tiga tingkat;
- mengatur semua kapal untuk permainan pertempuran laut (4 dek tunggal, 3 dek dua, 2 dek tiga, 1 dek empat).
GO TO FULL VERSION