Java-program cu o matrice
Last Updated: Oct 13 2018 17:50, Started by
bLue795
, Oct 09 2018 20:22
·
0
#1
Posted 09 October 2018 - 20:22
Salutare! M-am apucat de aproximativ 2 saptamani sa invat java si nu pot gasi rezolvarea la acesta problema. Vreau sa creez o matrice folosind 2 metode: una pentru initializarea elementelor si alta pentru afisarea lor. Atunci cand compilez nu primesc nicio eroare, dar la executare imi spune ca am depasit limita si nu inteleg cum este posibil... Acesta este programul scris:
import java.util.*; public class Matrice{ static Random rand = new Random(); double[][] mat; public void initializare(int n, int m){ double[][] mat = new double[n][m]; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) mat[i][j] = rand.nextInt(100); } public void afisare(){ for(int i=0;i<mat.length;i++) for(int j=0;j<mat.length;j++) System.out.println("mat["+i+"]["+j+"]"+" = " + mat[i][j]); } public static void main(String[] args){ Matrice mat = new Matrice(); mat.initializare(10,10); mat.afisare(); } } Sper ca nu am postat aiurea si ma va putea ajuta cineva! |
#2
Posted 09 October 2018 - 20:53
initial zici:
for(int i=0;i<=n;i++) for(int j=0;j<=m;j++)apoi zici: for(int i=0;i<mat.length;i++) for(int j=0;j<mat.length;j++) |
#3
Posted 09 October 2018 - 20:54
double[][] mat = new double[n][m];
sa zicem ca n = 3 ai o matrice x1 x2 x3 ... for(int i=0;i<=n;i++) valorile posibile ale lui n sunt: 0 1 2 3 => 4 elemente dar tu mai matricea cu 3 elemente. Vezi buba? Renunta la = ala de la i<=n (respectiv m) |
#4
Posted 09 October 2018 - 21:08
Mai sunt si alte probleme. Uita-te mai atent la cele 4 linii asupra carora ti-am atras atentia. Si nici asta nu e ok:
double[][] mat = new double[n][m]; |
#5
Posted 09 October 2018 - 21:22
Nu mi-am dat seama la acel for acolo... am scris prost..
De ce nu este corecta acea declarare ? La al 2-lea for de la afisare, m-am gandit sa iau i si j mai mici decat lungimea matricei. iar dupa modificare am eroare la executare java lang null pointer exception.. ar fi trebui sa primeasca parametru ceva ? este prima metoda de afisare a unei matrici pe care incerc sa o fac.. |
#6
Posted 09 October 2018 - 21:31
for(int i=0;i<mat.length;i++)
for(int j=0;j<mat.length;j++) daca te referi la latimea si lungime matricii, ai gresit intrucat te iei doar de lungime (mat.length). Daca ai o matrice unde latimea e diferita de lungime, crapa in punctul asta. |
#7
Posted 09 October 2018 - 21:38
Da. la al 2lea for ar trebui conditia j<mat[i].length.. am renuntat la variabilele n si m si am pus ca parametru doar matricea si asa nu crapa programul. o sa mai incerc maine sa ii dau de cap la cel de sus..
import java.util.*; public class Matrice{ static Random rand = new Random(); public static void initializare(double[][] mat){ for(int i=0;i<mat.length;i++) for(int j=0;j<mat[i].length;j++) mat[i][j] = rand.nextInt(100); } public static void afisare(double[][] mat){ for(int i=0;i<mat.length;i++) for(int j=0;j<mat[i].length;j++) System.out.println("mat["+i+"]["+j+"]"+" = " + mat[i][j]); } public static void main(String[] args){ double[][] mat = new double[1][3]; initializare(mat); afisare(mat); } } Edited by bLue795, 09 October 2018 - 21:43. |
#8
Posted 09 October 2018 - 21:40
bLue795, on 09 octombrie 2018 - 21:22, said:
De ce nu este corecta acea declarare ? |
#9
Posted 09 October 2018 - 21:42
si cand il umpli faci la fel
for(int i=0;i<mat.length;i++) for(int j=0;j<mat.length;j++) mat[i][j] = rand.nextInt(100); |
#10
Posted 09 October 2018 - 21:46
Am dat modificat mai devreme, am dat edit si mai sus. Am dat mai multe compilari si am observat ca era 0 valoarea pe pozitia respectiva si mi-am dat seama ca trebuia si acolo..
|
|
#11
Posted 09 October 2018 - 21:59
bLue795, on 09 octombrie 2018 - 20:22, said:
Sper ca nu am postat aiurea si ma va putea ajuta cineva! public class Matrice { static Random rand = new Random(); double[][] mat; public void initializare(int n, int m){ this.mat = new double[n][m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) mat[i][j] = rand.nextInt(100); } public void afisare(){ for(int i=0;i<mat.length;i++) for(int j=0;j<mat.length;j++) System.out.println("mat["+i+"]["+j+"]"+" = " + this.mat[i][j]); } public static void main(String[] args){ Matrice mat = new Matrice(); mat.initializare(10,10); mat.afisare(); } } Edited by puiu_pe_diezel, 09 October 2018 - 22:09. |
#12
Posted 09 October 2018 - 22:05
1. double[][] mat = new double[1][3];
2. initializare(mat); 3. afisare(mat); 1. mat e abia initializat si are toate valorile nule 2. in metoda initializare tu aloci unei matrici locale niste valori (coincidenta face ca matricea locala sa aiba acelasi nume) (vezi ca ti-a dat OriginalCopy ceva despre asta) (redenumeste mat din metoda initializare in orice altceva si vezi ce iese) 3. mat inca e null asa ca nu are ce sa afiseze (punctul 2 face doar modificari locale) Solutii: - fa-l pe mat variabila globala (declara-l dupa random, de ex) - modifica metoda initializare astfel incat sa-ti returneze mat(ul) local si apoi poti fie sa-i atribui lui mat noua valoare (mat = initializare(mat) ), fie sa-l printezi direct (afisare(initializare(mat))) |
#13
Posted 09 October 2018 - 22:07
sorin147, on 09 octombrie 2018 - 22:05, said:
Solutii: - fa-l pe mat variabila globala (declara-l dupa random, de ex) Quote
- modifica metoda initializare astfel incat sa-ti returneze mat(ul) local si apoi poti fie sa-i atribui lui mat noua valoare (mat = initializare(mat) ), fie sa-l printezi direct (afisare(initializare(mat))) Edited by puiu_pe_diezel, 09 October 2018 - 22:09. |
#14
Posted 10 October 2018 - 10:35
Si varianta OOP a programului tau:
import java.util.ArrayList; import java.util.Random; public class Matrice { Random rand = new Random(); ArrayList<ArrayList<Integer>> mat =new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> linie = null; int n, m = 0; public Matrice(int n, int m) { this.n = n; this.m = m; initializare(); } private void initializare(){ for(int i=0;i<n;i++) { linie = new ArrayList<Integer>(); for(int j=0;j<m;j++){ linie.add(rand.nextInt(100)); } mat.add(linie); } } public void afisare(){ //daca matricea s-ar putea sa nu fie patratica for(int i=0;i<n;i++) for(int j=0;j<m;j++) System.out.format("mat[%d][%d]=%d\n",i,j,mat.get(i).get(j)); } public static void main(String[] args){ new Matrice(10,10).afisare(); } } |
#15
Posted 10 October 2018 - 11:20
Mersi, @puiu_pe_diezel. Incerc sa pun bazele...
Am citit despre this, am inteles cum sta treaba cu el si l-am pus in program. Doar ca acum primesc eroare la compilare in main cand apelez metoda initializare. method can not be applied to given types. Ar trebui apelata altfel ? //si pe ultimul program aceeasi eroare Edited by bLue795, 10 October 2018 - 11:22. |
|
#16
Posted 10 October 2018 - 14:02
bLue795, on 10 octombrie 2018 - 11:20, said:
Mersi, @puiu_pe_diezel. Incerc sa pun bazele... Am citit despre this, am inteles cum sta treaba cu el si l-am pus in program. Doar ca acum primesc eroare la compilare in main cand apelez metoda initializare. method can not be applied to given types. Ar trebui apelata altfel ? //si pe ultimul program aceeasi eroare Orice e mai putin de atat e fix pix. Da, ne putem imagina ce ai facut. Problema pentru noi e ca suntem atat de rutinati in a face lucrurile corecte, incat ne imaginam gresit ce ai facut tu gresit. Deci cod sau nu existi. |
#17
Posted 11 October 2018 - 20:04
bLue795, on 10 octombrie 2018 - 11:20, said:
Mersi, @puiu_pe_diezel. Incerc sa pun bazele... Am citit despre this, am inteles cum sta treaba cu el si l-am pus in program. Doar ca acum primesc eroare la compilare in main cand apelez metoda initializare. method can not be applied to given types. Ar trebui apelata altfel ? //si pe ultimul program aceeasi eroare https://www.tutorial...java_online.php Edited by puiu_pe_diezel, 11 October 2018 - 20:06. |
#18
Posted 11 October 2018 - 20:22
Puiule, nu stiu care este sau a fost faza, dar la mine returna eroare. Am compilat cu succes codul in cele din urma, dar pentru asta a trebuit sa fac 2 clase. una unde aveam metoda de afisare si initializare si alta pentru main. si asa a mers...
Trebuie sa imi instalez si eu eclipse-ul. Eu lucrez cu cmd si notepad++. Mersi de ajutor! Attached FilesEdited by bLue795, 11 October 2018 - 20:23. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users