Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Errore Ciclo While

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19

    Errore Ciclo While

    Buonasera ragazzi...sono nuovo del forum, scusatemi se rifaccio la domanda(fatta pomeriggio),ma c'erano tanti errori.
    volevo chiedervi dove sbaglio in questo semplice programma : date due matrici, dice se la posizione di tutti i numeri negativi della prima matrice è uguale alla seconda. Il problema è il ciclo While che mi sa che non c'entra proprio niente? )) è un programma creato da 0 da me,per mettermi alla prova con l'esame... Mi sapreste aiutare?
    Ecco il codice :

    codice:
    //vedere se due matrici hanno i numeri negativi nelle stesse posizioni     
    import java.util.Scanner;
      public class MatriceNeg{
          public static void main(String args[]){
           Scanner sc = new Scanner(System.in);       
      System.out.println("Digitare la dimensione della matrice quadrata,esempio: 3 se la si vuole 3X3");   
    int dim = sc.nextInt();         int M1[][] = new int[dim][dim];         System.out.println("Immettere i numeri da inserire nella matrice");         leggi(M1);  
      System.out.println("Ecco la matrice");         stampa(M1);  
        System.out.println(); 		
    int M2[][] = new int[dim][dim]; 	
    System.out.println("Immettere i numeri da inserire nella matrice "+dim+"*"+dim); 		leggi(M2); 		
    System.out.println("Ecco la matrice");         stampa(M2);  		
     boolean neg=true;          
     while (M1[i][j]!=M1[M1.length-1][M1.length-1] && neg=true){        
        for(int i=0;i<M1.length;i++) 		
         for(int j=0;j<M1.length;j++) 		  
        if(M1[i][j]<0){ 				
         if(M1[i][j]=M2[i][j]) 				 
           neg=true; 				
         else
           neg=false; 		 }   	    
     
      if(neg) 	      
      System.out.println("La prima matrice ha la stessa posizione di numeri negativi della seconda"); 	      
    else 	       
     System.out.println("La prima matrice non ha la stessa posizione di numeri negativi della seconda"); 	 }  	 
    } 
    
      public static void leggi(int[][]M) 	  
      {Scanner sc = new Scanner(System.in); 	 
           for(int i=0;i<M[0].length;i++) 	      
            {for(int j=0;j<M.length;j++) 	         
              M[j][i] = sc.nextInt(); 	        } 	  }   
    
        public static void stampa(int[][]M) 	  
        {for(int i=0;i<M[0].length;i++) 	     
         {for(int j=0;j<M.length;j++) 	        
           System.out.print(M[j][i]+" ");  	 
                  System.out.println(); 	          } 	      } }

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: Errore Ciclo While

    Originariamente inviato da Mark_7
    Buonasera ragazzi...sono nuovo del forum, scusatemi se rifaccio la domanda(fatta pomeriggio),ma c'erano tanti errori.
    volevo chiedervi dove sbaglio in questo semplice programma : date due matrici, dice se la posizione di tutti i numeri negativi della prima matrice è uguale alla seconda. Il problema è il ciclo While che mi sa che non c'entra proprio niente? )) è un programma creato da 0 da me,per mettermi alla prova con l'esame... Mi sapreste aiutare?
    Ecco il codice :

    codice:
    //vedere se due matrici hanno i numeri negativi nelle stesse posizioni     
    import java.util.Scanner;
      public class MatriceNeg{
          public static void main(String args[]){
           Scanner sc = new Scanner(System.in);       
      System.out.println("Digitare la dimensione della matrice quadrata,esempio: 3 se la si vuole 3X3");   
    int dim = sc.nextInt();         int M1[][] = new int[dim][dim];         System.out.println("Immettere i numeri da inserire nella matrice");         leggi(M1);  
      System.out.println("Ecco la matrice");         stampa(M1);  
        System.out.println(); 		
    int M2[][] = new int[dim][dim]; 	
    System.out.println("Immettere i numeri da inserire nella matrice "+dim+"*"+dim); 		leggi(M2); 		
    System.out.println("Ecco la matrice");         stampa(M2);  		
     boolean neg=true;          
     while (M1[i][j]!=M1[M1.length-1][M1.length-1] && neg=true){        
        for(int i=0;i<M1.length;i++) 		
         for(int j=0;j<M1.length;j++) 		  
        if(M1[i][j]<0){ 				
         if(M1[i][j]=M2[i][j]) 				 
           neg=true; 				
         else
           neg=false; 		 }   	    
     
      if(neg) 	      
      System.out.println("La prima matrice ha la stessa posizione di numeri negativi della seconda"); 	      
    else 	       
     System.out.println("La prima matrice non ha la stessa posizione di numeri negativi della seconda"); 	 }  	 
    } 
    
      public static void leggi(int[][]M) 	  
      {Scanner sc = new Scanner(System.in); 	 
           for(int i=0;i<M[0].length;i++) 	      
            {for(int j=0;j<M.length;j++) 	         
              M[j][i] = sc.nextInt(); 	        } 	  }   
    
        public static void stampa(int[][]M) 	  
        {for(int i=0;i<M[0].length;i++) 	     
         {for(int j=0;j<M.length;j++) 	        
           System.out.print(M[j][i]+" ");  	 
                  System.out.println(); 	          } 	      } }

    Ciao, a naso:
    neg=true; // fuori dal ciclo
    for(int i=0;i<M1.length;i++) {
    for(int j=0;j<M1.length;j++) {
    if(M1[i][j]<0){
    if(M1[i][j]!=M2[i][j]) {
    neg=false;
    break;}
    }
    if (!neg) {
    break};
    }

    se trovi un numero negativo in posizione differente allora esci subito dal ciclo.

    La while non serviva, ora non ho provato il codice ma a meno di qualche errore sintattico, come concetto è quello.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19
    grazie!...ho provato ma mi da tantissimi errori alle funzioni che prima non dava,ma le funzioni sono giuste(le ho gia usate!!!)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Vedi quanto ti ho scritto qui: http://forum.html.it/forum/showthrea...4#post13521904


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    boolean neg=true;
            
            for (int i = 0; i < M1.length; i++) {
                for (int j = 0; j < M1[0].length; j++) {
                    neg = (M1[i][j] < 0 ? 
                            (M2[i][j] < 0 ? true : false) :
                            (M2[i][j] < 0 ? false : true)
                          );
                    if (!neg) {
                        break;
                    }
                }            
            }
    se non hai presente la sintassi:
    codice:
    condizione ? true : false
    ti rimando al manuale, comunque in breve vuol dire se si verifica la condizione, esegui la parte "true" altrimenti la parte "false"

    quindi se i,j-esimo elemento di M1 è negativo verifica se i,j-esimo elemento di M2 è negativo, ed in caso neg resta true, altrimenti se i,j-esimo di M2 è positivo o nullo neg diventa false. Avviene l'esatto contrario se i,j-esimo di M1 è non negativo.

    il break serve per uscire dal ciclo nel momento in cui si trovi una discrepanza.

    PS: ovviamente l'operatore ternario "condizione ? true : false" si può tradurre con if-else. E' solo un modo più compatto (ed elegante) di scrivere la stessa cosa.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19

    Re: Moderazione

    Originariamente inviato da LeleFT
    Vedi quanto ti ho scritto qui: http://forum.html.it/forum/showthrea...4#post13521904


    Ciao.
    Mi dovete riscusare,non succederà più!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19
    Originariamente inviato da Andrea1979
    codice:
    boolean neg=true;
            
            for (int i = 0; i < M1.length; i++) {
                for (int j = 0; j < M1[0].length; j++) {
                    neg = (M1[i][j] < 0 ? 
                            (M2[i][j] < 0 ? true : false) :
                            (M2[i][j] < 0 ? false : true)
                          );
                    if (!neg) {
                        break;
                    }
                }            
            }
    se non hai presente la sintassi:
    codice:
    condizione ? true : false
    ti rimando al manuale, comunque in breve vuol dire se si verifica la condizione, esegui la parte "true" altrimenti la parte "false"

    quindi se i,j-esimo elemento di M1 è negativo verifica se i,j-esimo elemento di M2 è negativo, ed in caso neg resta true, altrimenti se i,j-esimo di M2 è positivo o nullo neg diventa false. Avviene l'esatto contrario se i,j-esimo di M1 è non negativo.

    il break serve per uscire dal ciclo nel momento in cui si trovi una discrepanza.

    PS: ovviamente l'operatore ternario "condizione ? true : false" si può tradurre con if-else. E' solo un modo più compatto (ed elegante) di scrivere la stessa cosa.
    Guarda a me serve sapere se tutti i numeri negativi della prima matrice sono nella stessa identica posizione nella seconda matrice....cosi se non ho capito male si verifica se c'è un qualsiasi numero negativo nella seconda matrice....A me serve lo stesso numero!
    comunque quella sintassi con "?" non l'abbiamo fatto all'universita...casomai metto if-else?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Avevi solo parlato di posizione... quell'algoritmo effettivamente verifica solo se ad un eventuale valore negativo dell'elemento i,j-esimo di M1 corrisponda un eventuale (e qualsiasi) valore negativo in posizione i,j in M2. Modificalo tu, la sostanza ormai ce l'hai
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19
    Originariamente inviato da Andrea1979
    Avevi solo parlato di posizione... quell'algoritmo effettivamente verifica solo se ad un eventuale valore negativo dell'elemento i,j-esimo di M1 corrisponda un eventuale (e qualsiasi) valore negativo in posizione i,j in M2. Modificalo tu, la sostanza ormai ce l'hai
    Ho provato e ci sono riuscito...Con la condizione necessaria che la prima matrice abbia almeno un elemento negativo,è un pò una forzatura ma sembra meglio cosi...
    Ecco il codice,a chi potesse servire! Grazie mille Andrea e Joe Taras!!

    codice:
     
    boolean neg=true;  
       for(int i=0;i<M1.length;i++) 		     
          for(int j=0;j<M1.length;j++)
      	 if(M1[i][j]<0) 				  
              if(M1[i][j]!=M2[i][j]){ 				                                   		         
                      neg=false;
    		    break;}    	      
    
    if(neg) 	       
    System.out.println("La prima matrice ha la stessa posizione di numeri negativi della seconda"); 	     
    else 	        
    System.out.println("La prima matrice non ha la stessa posizione di numeri negativi della seconda");

  10. #10
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da Mark_7
    Ho provato e ci sono riuscito...Con la condizione necessaria che la prima matrice abbia almeno un elemento negativo,è un pò una forzatura ma sembra meglio cosi...
    Ecco il codice,a chi potesse servire! Grazie mille Andrea e Joe Taras!!

    codice:
     
    boolean neg=true;  
       for(int i=0;i<M1.length;i++) 		     
          for(int j=0;j<M1.length;j++)
      	 if(M1[i][j]<0) 				  
              if(M1[i][j]!=M2[i][j]){ 				                                   		         
                      neg=false;
    		    break;}    	      
    
    if(neg) 	       
    System.out.println("La prima matrice ha la stessa posizione di numeri negativi della seconda"); 	     
    else 	        
    System.out.println("La prima matrice non ha la stessa posizione di numeri negativi della seconda");
    Di niente, figurati, un consiglio però usa di più le parentesi anche se il blocco è una sola istruzione

    Buona serata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.