Classe Matrici dà uno strano output

di il
5 risposte

Classe Matrici dà uno strano output

Salve a tutti , ho un problema con questa classe e mi servirebbe un piccolo aiuto . Praticamente i metodi moltiplica, mul e minore mi danno come output [[D@1b6d3586 .Non capendo che cosa significa non so come modificare il programma , per cui qualcuno potrebbe spiegarmi a che cosa è dovuto questo strano output ??!!

public final class Matrici{
		private Matrici(){}

		private static double[][] copia( double[][] a ){
			double[][] c=new double[a.length][a[0].length];
			for( int i=0; i<a.length; i++ )
				System.arraycopy( a[i], 0, c[i], 0, a[i].length );
			return c;
		}//copia
		
		public static double[][] moltiplica( double[][] a, double[][] b ){
			//ipotesi: matrici quadrate
			if( a.length!=a[0].length ||b.length!=b[0].length || a.length!=b.length )
				throw new IllegalArgumentException("Matrici incompatibili");
			double[][] p=new double[a.length][a.length];
			for( int i=0; i<a.length; i++ )
				for( int j=0; j<a.length; j++ ){
					//fai prodotto scalare tra riga i-esima di a
					//e la colonna j-esima di b
					double ps=0.0D;
					for( int k=0; k<a.length; k++ )
						ps=ps+a[i][k]*b[k][j];
					p[i][j]=ps;
				}
            return p;
		}//moltiplica

		public static double[][] mul( double[][] a, double[][] b ){
			//ipotesi: matrici rettangolari
			if( a[0].length!=b.length )
				throw new IllegalArgumentException("Matrici incompatibili");
			double[][] p=new double[a.length][b[0].length];
			for( int i=0; i<p.length; i++ )
				for( int j=0; j<p[i].length; j++ ){
					//fai prodotto scalare tra riga i-esima di a
					//e la colonna j-esima di b
					double ps=0.0D;
					for( int k=0; k<a.length; k++ )
						ps=ps+a[i][k]*b[k][j];
					p[i][j]=ps;
				}
            return p;
		}//mul

		public static double[][] minore( double[][] a, int i, int j ){
			if( i<0||i>=a.length||j<0||j>=a[0].length )
				throw new IllegalArgumentException();
			double[][] m=new double[a.length-1][a[0].length-1];
			for( int r=0; r<a.length; r++ )
				for( int c=0; c<a[0].length; c++ ){
					if( r<i && c<j ) m[r][c]=a[r][c];
					if( r<i && c>j ) m[r][c-1]=a[r][c];
					if( r>i && c<j ) m[r-1][c]=a[r][c];
					if( r>i && c>j ) m[r-1][c-1]=a[r][c];
				}
			return m;
		}//minore

		public static double det( double[][] a ){
			//calcola il determinante di una matrice quadrata
			//con la regola di Laplace
			for( int i=0; i<a.length; i++ )
				if( a.length!=a[i].length )
					throw new IllegalArgumentException();
			if( a.length==1 ) return a[0][0];
			double d=0.0D;
			//riga di sviluppo: la 0-esima
			for( int j=0; j<a.length; j++ ){
				int s=(j%2==0)?1:-1;
				d=d+s*a[0][j]*det(minore(a,0,j));
			}
			return d;
		}//det

		public static void main( String[] args ){
			
			double b[][]={{1,0,2,-1},{4,2,1,0},{-3,2,0,1},{0,-1,1,2}};
			double a[][]={{2,1,-1,0},{1,2,2,-1},{0,2,-1,1},{1,-1,0,-1}};
			System.out.println("det="+det(a));
			System.out.println(moltiplica(a,b));
                        System.out.println(mul(a,b));
                        System.out.println(minore(a,1,3));
		}
	}//Matrici
	

5 Risposte

  • Re: Classe Matrici dà uno strano output

    Giulia95 ha scritto:


    Praticamente i metodi moltiplica, mul e minore mi danno come output [[D@1b6d3586
    Gli array NON ridefiniscono il toString(), resta quindi il toString() ereditato da Object che "sa" fornire solamente quella forma. E per gli array quella forma non è alterabile in alcun modo.

    L'unica cosa da fare è stampare il contenuto dell'array per conto proprio (con cicli e dei print) oppure sfruttando, se la forma è gradita, metodi come i toString() statici di java.util.Arrays .
  • Re: Classe Matrici dà uno strano output

    Ti ringrazio infinitamente andbin .
  • Re: Classe Matrici dà uno strano output

    Se volessi utilizzare i metodi toString() di java.util.Arrays dovrei importarlo all'inizio e poi fare System.out.print(Arrays.toString(mul(a,b))) ?? Perdonatemi ma è da poco che programmo in java
  • Re: Classe Matrici dà uno strano output

    Giulia95 ha scritto:


    Se volessi utilizzare i metodi toString() di java.util.Arrays dovrei importarlo all'inizio e poi fare System.out.print(Arrays.toString(mul(a,b))) ??
    Se hai un array bidimensionale, no. C'è il deepToString sempre di Arrays.
  • Re: Classe Matrici dà uno strano output

    Infatti nel modo in cui l'avevo scritto mi dava ancora l'output di prima . Grazie mille ancora
Devi accedere o registrarti per scrivere nel forum
5 risposte