Matrice con elementi colonne uguali

di il
7 risposte

Matrice con elementi colonne uguali

Funziona tutto, mi stampa però male il boolean Y[] a fine script...
import java.util.Scanner;
import java.util.Random;

public class Es_2_bis {
	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);

		System.out.println("inserisci N: ");
		int n = scan.nextInt();

		System.out.println("inserisci M: ");
		int m = scan.nextInt();

		int[][]matriceX = new int[n][m];

		matriceX = makeMatrix(n,m);

		for (int i = 0; i < matriceX.length; i++) {
			for (int j = 0; j < matriceX[i].length; j++) {

				System.out.print(matriceX[i][j] + " ");

			}System.out.println();
		}
		
		boolean[] Y = new boolean[m];
		
		Y = controllo(matriceX, n, m);
		
		for (int z = 0; z < Y.length; z++) {
			System.out.println(Y[z]);
		}
	}			


	static int[][] makeMatrix(int righe, int colonne) {

		int[][] x = new int[righe][colonne];

		for (int i = 0; i < righe; i++) {
			for (int j = 0; j < colonne; j++) {
				Random generator = new Random();
				int d = generator.nextInt(2);

				x[i][j] = d;

			}
		}

		return x;
	}
	
	static boolean[] controllo(int[][] matrice, int n, int m) {
		
		boolean[] y = new boolean[m];
		
		
		
		for (int i = 1; i < n; i++) {
			int check = 0;
			
			for (int j = 0; j < m; j++) {
				
				
				
				
				if(matrice[i][j] == matrice[i-1][j]) {
					
					check = check + 1;
					
					if(check%2 == 0 || check == 0) {
					y[j]=true;
					}else y[j]=false;	
				}
				

			}
		}
		
		return y;
		
		
		
	}


}

7 Risposte

  • Re: Matrice con elementi colonne uguali

    Riguarda bene il metodo controllo().
    Che cosa stai facendo lì dentro?
    La traccia dice di contare il numero di celle (nella colonna) contenenti il valore 1. Se questo conteggio è un numero pari, scrivi true, altrimenti false.

    Non mi pare che tu stia facendo questo... nella if dentro al ciclo for più interno controlli che il valore che stai considerando sia uguale a quello nella colonna precedente... perchè??

    Tra l'altro nel main crei un array di booleani che poi verrà sostituito da quello restituito dal metodo... quindi viene buttato via.
  • Re: Matrice con elementi colonne uguali

    Ho sistemato il codice così, prima avevo frainteso il testo, ma non è ancora giusto il codice
    
    Import java.util.Scanner;
    import java.util.Random;
    
    public class Es_2_bis {
    	public static void main(String[] args) {
    
    		Scanner scan = new Scanner(System.in);
    
    		System.out.println("inserisci N: ");
    		int n = scan.nextInt();
    
    		System.out.println("inserisci M: ");
    		int m = scan.nextInt();
    
    		int[][]matriceX = new int[n][m];
    
    		matriceX = makeMatrix(n,m);
    
    		for (int i = 0; i < matriceX.length; i++) {
    			for (int j = 0; j < matriceX[i].length; j++) {
    
    				System.out.print(matriceX[i][j] + " ");
    
    			}System.out.println();
    		}
    		
    		boolean[] Y = new boolean[m];
    		
    		Y = controllo(matriceX, n, m);
    		
    		for (int z = 0; z < Y.length; z++) {
    			System.out.println(Y[z]);
    		}
    	}			
    
    
    	static int[][] makeMatrix(int righe, int colonne) {
    
    		int[][] x = new int[righe][colonne];
    
    		for (int i = 0; i < righe; i++) {
    			for (int j = 0; j < colonne; j++) {
    				Random generator = new Random();
    				int d = generator.nextInt(2);
    
    				x[i][j] = d;
    
    			}
    		}
    
    		return x;
    	}
    	
    	static boolean[] controllo(int[][] matrice, int n, int m) {
    		
    		boolean[] y = new boolean[m];
    		
    		int check = 0;
    		
    		for (int i = 0; i < n; i++) {
    			
    			check = 0;
    			
    			for (int j = 0; j < m; j++) {
    			
    				if(matrice[i][j]==1)check = check +1;	
    				
    				
    				
    				if(check%2 == 0 || check == 0) {
    					y[j]=true;
    				}else y[j]=false;
    
    			}System.out.println("check: " + check);
    		}
    		
    		return y;
    			
    	}
    }
  • Re: Matrice con elementi colonne uguali

    
    if(check%2 == 0 || check == 0) {
       y[j]=true;
    } else y[j]=false;
    
    1) mettere in or "check == 0" non serve a nulla. (0 % 2) dà 0. Quindi ti basta la prima condizione (chi ha scritto nella traccia "assumendo 0 pari" o è digiuno di aritmetica o ha voluto creare una "difficoltà inesistente").
    2) Stai contando i valori 1 delle righe, non delle colonne.
  • Re: Matrice con elementi colonne uguali

    Per il punto 1) hai ragione non ci avevo pensato, ma per il punto 2 io devo verificare il numeri di 1 nelle colonne, non nelle righe, o per lo meno potrei verificarlo nelle righe con posizione pari penso...
    Scusa se non percepisco al volo ma sono nuovo dell' ambiente
  • Re: Matrice con elementi colonne uguali

    Quello che devi fare è contare i valori 1 nelle colonne.
    Quello che invece stai facendo con quel codice è contare i numeri 1 nelle righe.

    Non è difficile, ragiona. Tu stai tenendo fissa la i sulla riga con il for esterno e scorrendo la j sulle colonne con il for interno: stai scorrendo le colonne della riga... devi fare il contrario: tenere fissa la j sul ciclo for esterno e scorrere la i sul ciclo interno.
  • Re: Matrice con elementi colonne uguali

    Oddio mio che stupido, ci avevo provato prima però forse non avevo cambiato m ed n nelle condizioni del for.... grazie mille davvero!!
  • Re: Matrice con elementi colonne uguali

    Lascio lo script completo se può fare comodo a qualcun' altro
    import java.util.Scanner;
    import java.util.Random;
    
    public class Es_2_bis {
    	public static void main(String[] args) {
    
    		Scanner scan = new Scanner(System.in);
    
    		System.out.println("inserisci N: ");
    		int n = scan.nextInt();
    
    		System.out.println("inserisci M: ");
    		int m = scan.nextInt();
    
    		int[][]matriceX = new int[n][m];
    
    		matriceX = makeMatrix(n,m);
    
    		for (int i = 0; i < matriceX.length; i++) {
    			for (int j = 0; j < matriceX[i].length; j++) {
    
    				System.out.print(matriceX[i][j] + " ");
    
    			}System.out.println();
    		}
    		
    		boolean[] Y = controllo(matriceX, n, m);
    		
    		for (int z = 0; z < Y.length; z++) {
    			System.out.println(Y[z]);
    		}
    	}			
    
    
    	static int[][] makeMatrix(int righe, int colonne) {
    
    		int[][] x = new int[righe][colonne];
    
    		for (int i = 0; i < righe; i++) {
    			for (int j = 0; j < colonne; j++) {
    				Random generator = new Random();
    				int d = generator.nextInt(2);
    
    				x[i][j] = d;
    
    			}
    		}
    
    		return x;
    	}
    	
    	static boolean[] controllo(int[][] matrice, int n, int m) {
    		
    		boolean[] y = new boolean[m];
    		
    		int check = 0;
    		
    		for (int j = 0; j < m; j++) {
    
    			check = 0;
    			
    			for (int i = 0; i < n; i++) {
    				
    			
    				if(matrice[i][j]==1)check = check +1;	
    				
    				if(check%2 == 0) {
    					y[j]=true;
    				}else y[j]=false;
    
    			}//System.out.println("check: " + check);
    		}
    		
    		return y;
    			
    	}
    }
Devi accedere o registrarti per scrivere nel forum
7 risposte