Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Ar trebuii sa vindem imobiliarele...

Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...
 Dade, dade

Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...
 Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik
 Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...

Crapaturi placa

cum imi accesez dosarul electroni...
 

Java-program cu o matrice

- - - - -
  • Please log in to reply
21 replies to this topic

#1
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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!Posted Image

#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
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
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostbLue795, on 09 octombrie 2018 - 21:22, said:

De ce nu este corecta acea declarare ?
https://en.wikipedia..._shadowing#Java

#9
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
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
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018

View PostbLue795, on 09 octombrie 2018 - 20:22, said:

Sper ca nu am postat aiurea si ma va putea ajuta cineva!Posted Image

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
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
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
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018

View Postsorin147, on 09 octombrie 2018 - 22:05, said:

Solutii:
- fa-l pe mat variabila globala (declara-l dupa random, de ex)
Nu este  variabila globala, este un membru al clasei Matrice

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)))
in java lucrurile sunt simple daca se foloseste abordarea OOP .Astfel, extrem de simpl, vom avea : this.mat = ce vrei tu.

Edited by puiu_pe_diezel, 09 October 2018 - 22:09.


#14
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018
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
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostbLue795, 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
De fiecare data cand postezi o problema, posteaza eroarea (copy/paste) si codul (copy/paste).

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
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018

View PostbLue795, 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
Attached File  matrice.PNG   158.56K   10 downloads
https://www.tutorial...java_online.php

Edited by puiu_pe_diezel, 11 October 2018 - 20:06.


#18
bLue795

bLue795

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 09.05.2018
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 Files

  • Attached File  matt.jpg   162.34K   11 downloads

Edited 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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate