Programma per contare righe con numeri uguali

di il
3 risposte

Programma per contare righe con numeri uguali

Ciao,

seguo un corso  java online e mi sono imbattuto su un'esercizio che data una determinata matrice…. chiede di stampare quante sono le righe con almeno due numeri uguali. Ho scritto questo codice poi mi sono bloccato…

  public static void main(String [] args){
        Scanner tastiera = new Scanner(System.in);
        int n , count=0, elemento=0;        

        System.out.println("Inserisci valore di n");
        n = tastiera.nextInt();
        int array [] = new int [16];
        int matrice [][] = {{1 ,1 , 2 , 1},
                            {3 , 2 , 1 , 4 },
                            {4 , 1 , 4 , 2 },
                             {1 , 4 , 3 , 2}};

        System.out.println("Stampa Matrice");           
        for(int i = 0; i < matrice.length; i ++){
            for(int j =0; j<matrice[i].length; j++){
                        System.out.print("\t" + matrice[i][j]);
          }
         System.out.println();         
        }

        for(int i =0; i<matrice.length; i++){
            for(int j=0; j<matrice[i].length;j++){
                elemento=matrice[i][j];                 
                for(int k=j+1; k<=n;k++){  
                    if (elemento==matrice[i][k]){
                        System.out.println("Riga " + i + " numeri");
                    }
                }
            
        	}
    }
        
       

       
    
        
    }

}

Riesco a scorrere le righe e controllare se ci sono numeri uguali…. l'esercizio richiede che venga stampato il numero in questo caso 2 di righe con numeri uguali … come potrei fare?

3 Risposte

  • Re: Programma per contare righe con numeri uguali

    Devi ragionare in questo modo, parti dal concetto di “almeno due numeri uguali” in un array int[]. Per ciascun elemento a indice i devi andare a cercare quel valore agli indici i+1….length-1. Quindi quali/quanti cicli ti servono?

    Inizia con il fare un metodo a sé stante:

    public static boolean almenoDueUguali(int[] array)

    Poi il fatto di trattare una matrice (quindi più array) lo farai a monte nel main.

  • Re: Programma per contare righe con numeri uguali

    10/01/2023 - andbin ha scritto:

    Devi ragionare in questo modo, parti dal concetto di “almeno due numeri uguali” in un array int[]. Per ciascun elemento a indice i devi andare a cercare quel valore agli indici i+1….length-1. Quindi quali/quanti cicli ti servono?

    Inizia con il fare un metodo a sé stante:

    public static boolean almenoDueUguali(int[] array)

    Poi il fatto di trattare una matrice (quindi più array) lo farai a monte nel main.

    Grazie per la risposta attualmente sono risucito a risolvere in questo modo :

      public static void main(String [] args){
    
            Scanner tastiera = new Scanner(System.in);
            int n , count=0, elemento=0;    
    
            System.out.println("Inserisci valore di n");
            n = tastiera.nextInt();
            int array [] = new int [16];
            int matrice [][] = new int [n][n]  ;    //{{1 ,1 , 2 , 1},{3 , 2 , 1 , 4 },{4 , 1 , 4 , 2 },{1 , 4 , 3 , 2}};
    
            for(int i =0; i <matrice.length; i++){
                for(int j=0;j<matrice.length;j++){
                    matrice[i][j]=(int)(Math.random()*n);
                }
            }         
    
            System.out.println("Stampa Matrice");           
            for(int i = 0; i < matrice.length; i ++){
                for(int j =0; j<matrice[i].length; j++){
                            System.out.print("\t" + matrice[i][j]);
              }
             System.out.println();         
            }
    
            for(int i =0; i<matrice.length; i++){
                int conta=0;
                for(int j=0; j<matrice[i].length;j++){
                    elemento=matrice[i][j];  
                    
                    for(int k=j+1; k<matrice[i].length;k++){  
                                         
                        if (elemento==matrice[i][k] && conta == 0){
                            System.out.println("Riga " + i + " numeri");
                            count++;
                            conta++;
                        }
                    }
                
            }
        }
            System.out.println(count);
        
            
        }
    
    }

    Adesso provo a sviluppare anche il tuo suggerimento.

  • Re: Programma per contare righe con numeri uguali

            for(int i =0; i<matrice.length; i++){
                int conta=0;
                for(int j=0; j<matrice[i].length;j++){
                    elemento=matrice[i][j];  
                    
                    for(int k=j+1; k<matrice[i].length;k++){  
                                         
                        if (elemento==matrice[i][k] && conta == 0){
                            System.out.println("Riga " + i + " numeri");
                            count++;
                            conta++;
                        }
                    }
                
            }
        }

    Così è molto poco intuitivo/leggibile. Oltre al fatto che hai dovuto usare 2 variabili (count/conta). E quel test particolare conta==0.

    Se fai come ho indicato (innanzitutto un metodo che testa SOLO la logica del “almeno due uguali” e nient'altro, niente print ecc…) diventa tutto super-leggibile e con molta meno roba.

Devi accedere o registrarti per scrivere nel forum
3 risposte