Java programavimas Nr. 3
|Šiandien spręsime dar sudėtingesnę užduoti naudojant Java dvimačius masyvus.
Java užduotis
- dvimačio masyvo sukūrimas (panaudojant random arba funkcijos skaičiavimus);
- dvimačio masyvo atspausdinimas lentelės forma;
- dvimačio masyvo pagrindinės įstrižainės spausdinimas;
- dvimačio masyvo stulpelio ir eilutės sumos skaičiavimas;
- pakoreguoti programą, kad dvimačio masyvo matmenis galima būtų nurodyti per programos parametrus
Bandysiu rašyti užduoti dalimis, kad būtų galima lengviau suprasti kaip reikia šias užduotis spręsti naudojant Java. Nenaudojant kompiliatoriaus viską galima rašyti ir pasileisti naudojant: https://www.jdoodle.com/online-java-compiler
Skaitykite komentarus esančius šalia kodo, bandysiu paaiškinti, kodėl ir kaip viskas veikia.
Pirmas dalis
Sukursime dvimatį masyvą naudojant random funkciją.
- dvimačio masyvo sukūrimas (panaudojant random arba funkcijos skaičiavimus);
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 2; int n = 3; int masyvas[][] = new int[m][n]; // sukuriamas naujas tuščias masyvas for (int i = 0; i < m; i++) //Ciklo for pagalba užpildomas masyvas { for (int j = 0; j < n; j++) { masyvas[i][j] = (int) (10 * Math.random()); //Naudojant Random funkcijas sugeneruojame atsitiktinius elementus System.out.println(masyvas[i][j]); } } } }
Turime gauti tokį rezultatą:
6 6 5 8 4 4
Antras dalis
Sukursime naują Masyvai1 elementą O1 ir su jo pagalba pirmoje klasėje Masyvai1 paleisime antrą naujai sukurtą klasę sukurti.
- Perkelsime masyvo generavimą iš Masyvai1 klasės į naują klasę sukurti
- Pakeisime klasės sukurti tipą iš void į int[][]. Šis pakeitimas reikalingas, kad mes galėtume šios klasės sukurtą masyvą naudoti kitose klasėse
- dvimačio masyvo atspausdinimas lentelės forma;
1) Perkeliame masyvo generavimą į naują klasę:
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 2; int n = 3; int masyvas[][] = new int[m][n]; // sukuriamas naujas tuščias masyvas Masyvai1 O1 = new Masyvai1(); // Sukuriame elementą O1 su kurio pagalba galėsime paleisti vykdyti kitas klases O1.sukurti( m, n); //Paleidžiame klasę sukurti } public void sukurti (int eil, int stul) { int masyvas[][] = new int[eil][stul]; // sukuriamas naujas tuščias masyvas for (int i = 0; i < eil; i++) //Ciklo for pagalba užpildomas masyvas { for (int j = 0; j < stul; j++) { masyvas[i][j] = (int) (10 * Math.random()); //Naudojant Random funkcijas sugeneruojame atsitiktinius elementus System.out.println(masyvas[i][j]); } } } }
2) Pakeisime klasės sukurti tipą iš void į int[][]. Šis pakeitimas reikalingas, kad mes galėtume šios klasės sukurtą masyvą naudoti kitose klasėse. Ir Masyvas1 klasės viduje sukursime naują kintamąjį masyvas kuriam priskirsime sukurti klasės rezultatą masyvas = O1.sukurti( m, n);
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 2; int n = 3; int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); //Prirašomas masyvas = norint sukurti elementą masyvas, kurį naudosime kituose lementuose. masyvas = O1.sukurti( m, n); } public int[][] sukurti (int eil, int stul) { //klasėje sukurti bus saugomas sukurtas masyvas int masyvas[][] = new int[eil][stul]; for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { masyvas[i][j] = (int) (10 * Math.random()); System.out.println(masyvas[i][j]); } } return masyvas; // gražiname klasės gautą rezultatą } }
3) Spausdinsime masyvą lentelės forma. Tam sukursime naują klasę spausdinti. Skaitykite komentarus dėl platesnių paaiškinimų.
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 2; int n = 3; int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); masyvas = O1.sukurti( m, n); O1.spausdinti(masyvas, m, n); //paleidžiame spausdinti klasę } public int[][] sukurti (int eil, int stul) { //klasėje sukurti bus saugomas sukurtas masyvas int masyvas[][] = new int[eil][stul]; for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { masyvas[i][j] = (int) (10 * Math.random()); //pašaliname spaudinimą, kadangi dabar spausdinsime su spausdinti klase } } return masyvas; // gražiname klasės gautą rezultatą } //sukurta naujas spausdinti klasė (turi tris elementus masyvą A, eilutės ir stulpelio kintamąjį) public void spausdinti (int[][] A, int eil, int stul) { for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { System.out.print(A[i][j] + " "); //spausdiname kintamuosius naudodami print, juos atskirame tarpu } System.out.println(); // atspaudine visus masyvo elementus vienoje eilutėje sukuriame naują eilutę } } }
Rezultatas:
6 8 2 0 1 1
Trečia dalis
Dvimačio masyvo pagrindinės įstrižainės spausdinimas;
- Pridėsime papildomas eilutes, kad būtų gražiau išvedamas tekstas
- Sukursime naują klasę spausdinti_istr ir ją paleisime per klasę Masyvas1
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 3; int n = 3; int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); masyvas = O1.sukurti( m, n); O1.spausdinti(masyvas, m, n); O1.spausdinti_istr(masyvas, m, n); //paleidžiame spausdinti_istr klasę } public int[][] sukurti (int eil, int stul) { int masyvas[][] = new int[eil][stul]; for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { masyvas[i][j] = (int) (10 * Math.random()); } } return masyvas; } public void spausdinti (int[][] A, int eil, int stul) { System.out.println("Masyvas: "); //papildomas tekstas rezultato formatavimui for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { System.out.print(A[i][j] + " "); } System.out.println(); } System.out.println(); //papildomas tuščia eilutė rezultato formatavimui } public void spausdinti_istr (int[][] A, int eil, int stul) { System.out.println("Spausdiname pagrindines istrizaines elementus:"); //papildomas tekstas formatavimui for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { if (i==j) { //jeigu masyvo elementas i yra lygus j, tai bus pvz. 1-1 arba 2-2 arba 3-3 System.out.print(A[i][j] + " "); //tuo atveju spausdinsime šiuose elementus ir jie bus pagrindinės įstrižainės elementai } } } } }
Rezultatas:
Masyvas: 9 6 8 0 6 6 9 6 8 Spausdiname pagrindines istrizaines elementus: 9 6 8
Ketvirta dalis
Užduotis: dvimačio masyvo stulpelio ir eilutės sumos skaičiavimas;
Taupant vietą ankstesnė kodo dalis buvo pašalinta.
Sprendimas:
Norėdami suskaičiuoti tam tikros eilutės ar stulpelio elementus turėsime atlikti kelis papildymus:
- Masyvai elementus pradeda skaičiuoti nuo 0 elemento
- Sukursime naują klasę, kurioje pridėsime dar du elementus public void SumaEil(int[][]A, int eil, int stul, int stul_ar_eil, int numeris) nauji elementai bus stulp_ar_eil ir numeris
- Norėdami paleisti šią klasę per Masyva1 naudosime O1.SumaEil(masyvas, m, n, 0, 1); atitinkamai suvesime 0 arba 1 stul_ar_eil vietoje kas lems ar tai bus eilutė ar stulpelis
- Ir int numeris įvesime norimo stulpelio ar eilutės numerį
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 3; int n = 3; int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); masyvas = O1.sukurti( m, n); O1.spausdinti(masyvas, m, n); O1.spausdinti_istr(masyvas, m, n); O1.SumaEil(masyvas, m, n, 0, 1); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus eilutė nr. 1 O1.SumaEil(masyvas, m, n, 1, 2); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus stulpelis nr. 2 } public int[][] sukurti (int eil, int stul) { } public void spausdinti (int[][] A, int eil, int stul) { } public void spausdinti_istr (int[][] A, int eil, int stul) { } public void SumaEil(int[][]A, int eil, int stul, int stul_ar_eil, int numeris) { int suma = 0; // sukuriame kintamąjį, kuriame skaičiuosime sumas if (stul_ar_eil == 0) { // pagal duotą reikšmę palyginame ar tai bus eilutė ir sulpelis, jeigu 0 imame pirmą if ir skaičiuojame būtent stulpelius System.out.println("Eilutes elementai: "); //teksto formatavimas for (int i = 0; i < eil; i++) { //kodas leidžiamas per visas eilutes suma = suma + A[numeris][i]; // suvedamas [numeris] argumentas, jis nekinta, kadangi norime gauti konkrečius eilutės elementus System.out.print(A[numeris][i] + " "); //išspausdiname reikiamus elementus } System.out.println("\nEilute nr: " + (numeris = numeris + 1) + " elementu suma: " + suma );// spausdiname gautas reikšmeskadangi masyvai skaičiuoja elementus nuo 0, tai prie numeris pridedame vienetą, kad būtų lengviau matyti, kuri eilutė ar stulpelis yra tiksliai atspausdintas } else { System.out.println("\n"); //Spausdiname tuščia eilutę System.out.println("Stulpelio elementai: "); for (int j = 0; j < stul; j++) { suma = suma + A[j][numeris];// suvedamas [numeris] argumentas, jis nekinta, kadangi norime gauti konkretaus stulpelio elementus System.out.print(A[j][numeris] + " ");//išspausdiname reikiamus elementus } System.out.println("\nStulpeio nr: " + (numeris = numeris + 1) + " elementu suma: " + suma ); // spausdiname gautas reikšmes kadangi masyvai skaičiuoja elementus nuo 0, tai prie numeris pridedame vienetą, kad būtų lengviau matyti, kuri eilutė ar stulpelis yra tiksliai atspausdintas } } }
Rezultatas:
Masyvas: 1 4 1 5 4 3 7 2 3 Spausdiname pagrindines istrizaines elementus: 1 4 3 Eilutes elementai: 5 4 3 Eilute nr: 2 elementu suma: 12 Stulpelio elementai: 1 3 3 Stulpeio nr: 3 elementu suma: 7
Penkta dalis
Užduotis: pakoreguoti programą, kad dvimačio masyvo matmenis galima būtų nurodyti per programos parametrus
Sprendimas
Į klasę Masyvas1 įterpiame papildomai patikrinimą klasės args argumentui. Nustatę, jeigu jis daugiau, nei nulis, tuomet yra imami į konsolę įvesti pirmi du argumentai atskirti tarpu.
Šiuo abu argumentus naudojame vietoje m ir n priskirtų reikšmių.
public class Masyvai1 { public static void main(String[] args) { int m = 3; int n = 3; if (args.length>1) { System.out.println("Suvesti parametrai: m = " + args[0] + " n = " + args[1]); m = Integer.parseInt(args[0]); n = Integer.parseInt(args[1]); System.out.println(""); } int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); masyvas = O1.sukurti( m, n); O1.spausdinti(masyvas, m, n); O1.spausdinti_istr(masyvas, m, n); O1.SumaEil(masyvas, m, n, 0, 1); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus eilutė nr. 1 O1.SumaEil(masyvas, m, n, 1, 2); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus stulpelis nr. 2 }
Rezultatas:
Suvesti parametrai: m = 4 n = 4
Pilnas programos kodas:
import java.io.*; public class Masyvai1 { public static void main(String[] args) { int m = 3; int n = 3; if (args.length>1) { System.out.println("Suvesti parametrai: m = " + args[0] + " n = " + args[1]); m = Integer.parseInt(args[0]); n = Integer.parseInt(args[1]); System.out.println(""); } int masyvas[][] = new int[m][n]; Masyvai1 O1 = new Masyvai1(); masyvas = O1.sukurti( m, n); O1.spausdinti(masyvas, m, n); O1.spausdinti_istr(masyvas, m, n); O1.SumaEil(masyvas, m, n, 0, 1); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus eilutė nr. 1 O1.SumaEil(masyvas, m, n, 1, 2); //paleidžiame klasę ir suvedame norimas reikšmes šiuo atveju bus stulpelis nr. 2 } public int[][] sukurti (int eil, int stul) { int masyvas[][] = new int[eil][stul]; for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { masyvas[i][j] = (int) (10 * Math.random()); } } return masyvas; } public void spausdinti (int[][] A, int eil, int stul) { System.out.println("Masyvas: "); for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { System.out.print(A[i][j] + " "); } System.out.println(); } System.out.println(); } public void spausdinti_istr (int[][] A, int eil, int stul) { System.out.println("Spausdiname pagrindines istrizaines elementus:"); for (int i = 0; i < eil; i++) { for (int j = 0; j < stul; j++) { if (i==j) { //jeigu masyvo elementas i yra lygus j, tai bus pvz. 1-1 arba 2-2 arba 3-3 System.out.print(A[i][j] + " "); //tuo atveju spausdinsime šiuose elementus ir jie bus pagrindinės įstrižainės elementai } } } System.out.println("\n"); //Spausdiname tuščia eilutę } public void SumaEil(int[][]A, int eil, int stul, int stul_ar_eil, int numeris) { int suma = 0; if (stul_ar_eil == 0) { System.out.println("Eilutes elementai: "); for (int i = 0; i < eil; i++) { suma = suma + A[numeris][i]; System.out.print(A[numeris][i] + " "); } System.out.println("\nEilute nr: " + (numeris = numeris + 1) + " elementu suma: " + suma ); } else { System.out.println("\n"); //Spausdiname tuščia eilutę System.out.println("Stulpelio elementai: "); for (int j = 0; j < stul; j++) { suma = suma + A[j][numeris]; System.out.print(A[j][numeris] + " "); } System.out.println("\nStulpeio nr: " + (numeris = numeris + 1) + " elementu suma: " + suma ); } } }
Jeigu patiko straipsnis. Nepatingėkite paspausti ant patikusio pasiūlymo puslapyje 🙂
Ankstesnius straipsnius su Java rasite skiltyje Learn.