JavaRush /Blog Jawa /Random-JV /Ngatasi masalah nglibatno susunan siji-dimensi lan loro-d...
Анзор Кармов
tingkat
Санкт-Петербург

Ngatasi masalah nglibatno susunan siji-dimensi lan loro-dimensi

Diterbitake ing grup
Artikel iki bakal nimbang (lan, luwih akeh, nyedhiyakake analisis independen) masalah sing nglibatake array. Kita bakal nambah katrampilan ing bidang ing ngisor iki:
  1. Susunan siji-dimensi

    1. Masalah "Terusake urutane" ;
    2. Tugas panelusuran unsur;
    3. Masalah nglibatake ngurutake unsur array.
  2. Susunan rong dimensi

    1. Tugas "Mbangun matriks saka formulir" ;
    2. Tugas "Temokake unsur ing papan sing paling ora dikarepke (baris, kolom, diagonal)" ;
    3. Tugas "Atur kapal kanggo perang banyu . "
Kanggo kabeh masalah, kita bakal nggunakake array integer. Kita ngatasi masalah ing array siji-dimensi lan loro-dimensi - 1

Masalah nglibatno susunan siji-dimensi

Terusake urutane

Ing seri tugas iki, sampeyan kudu:
  1. Nemtokake pola miturut urutan angka iki utawa kasebut.
  2. Tulis fungsi sing mbentuk unsur N pisanan saka urutan diwenehi minangka array integer lan nampilake unsur array ing layar.
Upaminipun kita ngadhepi tugas kanggo nerusake seri nomer ing ngisor iki:

1, 2, 3, 4, 5…
Langkah 1: Ngenali pola. Kabeh ing kene ana dhasar - iki minangka seri nomer alami. Langkah 2: nulis fungsi sing bakal mbentuk unsur N pisanan saka baris diwenehi minangka array:
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;
    }
}
Kajaba iku, perlu kanggo nulis fungsi sing bakal nerusake urutan ing ngisor iki:

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…

Telusuri unsur

Ing seri tugas iki, perlu kanggo nemokake unsur ing array rampung sing nduweni sawetara sifat. Contone, unsur karo nilai maksimum. Kanggo nduduhake, ayo kang nulis kode kanggo fungsi sing njupuk Uploaded lan nemtokake indeks saka unsur maksimum ing Uploaded, lan banjur output unsur iki bebarengan karo indeks kanggo console. Aku uga bakal nduduhake carane, nggunakake kelas, java.util.concurrent.ThreadLocalRandomsampeyan bisa kanthi cepet generate array integer dawa tartamtu, dumadi saka unsur acak:
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));
    }
}
Saiki tugas dhewe. Saka array saka unsur integer acak kita kudu golek:
  1. maksimal.
  2. minimal.
  3. Rata-rata.
  4. Jumlah unsur antarane unsur maksimum lan minimal.
  5. Nomer prima pisanan.
  6. Nomer prima pungkasan.
  7. Jumlah nomer prima ing larik.
Sampeyan bisa nampilake nilai lan indeks. Yen ora ana unsur sing sampeyan goleki, tampilake ing layar kaya sing dikarepake. Kanggo tugas pungkasan, sampeyan kudu nyiyapake array saka unsur integer diurutake ing urutan munggah. Ing array iki, sampeyan kudu nemokake unsur kanthi nilai ing jumlah minimal operasi ( Petunjuk ).

Ngurutake

Ing seri masalah iki, sampeyan kudu ngurutake sawetara unsur integer nggunakake macem-macem algoritma ngurutake. Ana cukup akeh bahan ing Internet babagan macem-macem algoritma. Coba mangertos inti saka algoritma pisanan, lan banjur nyoba kanggo ngleksanakake dhewe. Pisanan ing kertas (diagram blok, pseudocode, apa wae sing cocog karo sampeyan), banjur ing IDEA. Algoritma kanggo implementasine:
  • jinis gelembung;
  • urutan pilihan;
  • ngurutake sisipan;
  • nggabung urut.

Masalah nglibatno susunan loro-dimensi

Gambar matriks

Ing seri tugas sabanjure, perlu kanggo nggambar (output menyang konsol) susunan rong dimensi (matriks) sing disusun kanthi cara tartamtu: kudu cocog karo pola sing ditemtokake dening tugas kasebut. Ayo kula menehi conto. Kita kudu mbangun lan nampilake matriks m*n(ing endi mjumlah larik, lan njumlah unsur ing baris) saka formulir:

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Ayo nulis fungsi sing bakal nindakake kabeh kanggo kita, lan uga nyedhiyakake fungsi sing bakal ngasilake matriks menyang konsol (sampeyan bisa uga migunani):
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();
        }
    }
}
Saiki tugas: Tampilake matriks m*nsaka formulir: 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

Telusuri unsur

Ing bagean iki, perlu kanggo ngleksanakake panelusuran kanggo macem-macem unsur ing macem-macem bagean matriks: ing kolom tartamtu utawa ing baris tartamtu. Ayo kita nganggep kita duwe matriks saka wangun: -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 Minangka conto, ayo golek nomer unsur negatif ing baris katelu:
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();
        }
    }
}
Minangka asil saka nglakokaké cara utama, ing ngisor iki bakal output kanggo console:

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 
Saiki tugas. Kanggo sembarang aneh, nprint matriks n*nsaka formulir:

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Saka matriks iki diturunake:
  • kabeh unsur negatif;
  • kabeh unsur negatif ing senar i;
  • kabeh unsur negatif ing kolom j;
  • kabeh unsur diagonal (wiwit saka pojok kiwa ndhuwur);
  • kabeh unsur diagonal (wiwit saka sudhut kiwa ngisor).

perang segara

Bagian pungkasan kanthi tanda bintang: ora ana tips utawa conto. Matriks becik kanggo program game perang laut. Salah sawijining tahap pemrograman game iki yaiku penempatan kapal ing lapangan dolanan. Yen sampeyan ngatasi sawetara masalah kasebut, yakin manawa sampeyan bakal bisa ngatasi pertempuran laut. Dadi, diwenehi matriks 10x10 sing kasusun saka nol. Ayo nganggep yen iki minangka lapangan kanggo dolanan perang angkatan laut. Ing lapangan iki, 0 minangka sel kosong, 1 minangka kapal utawa bagean saka kapal. Tulis fungsi, sing saben-saben, miturut aturan game perang laut, dilebokake kanthi acak:
  • 10 kapal siji-dek;
  • 10 corbals kaping pindho;
  • 5 kapal telung tingkat;
  • ngatur kabeh kapal kanggo game perang segara (4 single-deck, 3 pindho-deck, 2 telung-deck, 1 papat-deck).
Iku kabeh! Kaya topik pemrograman, array paling apik dipelajari liwat latihan. Sugeng pemanasan!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION