Condizione incomprensibile per me

di il
8 risposte

Condizione incomprensibile per me

Condizione incomprensibile ...

chiedo scusa, come dicevo altre volte, sono un autodidatta.
Non riesco a capire le condizioni di questo esempio(so che || è OR logico e che != è la disguaglianza) ... non capisco cosa sia il %(la divisione?). Qualcuno può spiegarmi le condizioni in linguaggio umano?

ps. a naso però per me l'esempio non funziona, voi che dite? dovrebbe dare false perchè 2,3,4 contengono un numero dispari ...

grazie.

//Controllare se tutti gli elementi di un vettore di interi sono pari
public class Es { 
	public static void main(String[] args) {
		int[] v={2,3,4}; 
		System.out.println(cerca(v,0)); 
		} 
	public static boolean cerca(int[] v,int i) { 
		if ((i>=v.length)||(v[i]%2!=0)) return false;
		else return (v[i]%2==0) || cerca(v, i+1); 

	} 
}

8 Risposte

  • Re: Condizione incomprensibile per me

    Ciao, % indica il resto della divisione. Spesso viene utilizzato per determinare se un numero è pari o dispari.
    
    if((numero % 2) == 0) pari
    else dispari
    
  • Re: Condizione incomprensibile per me

    minomic ha scritto:


    Ciao, % indica il resto della divisione. Spesso viene utilizzato per determinare se un numero è pari o dispari.
    
    if((numero % 2) == 0) pari
    else dispari
    
    grazie è un passo avanti ... ora me lo ristudio
  • Re: Condizione incomprensibile per me

    Ti posto un esempio funzionante e basato su una logica piuttosto semplice. Comunque non mi sembra l'approccio più semplice.
    
    //Controllare se tutti gli elementi di un vettore di interi sono pari
    public class Es { 
    
    
    	public static void main(String[] args) {
    		int[] v = new int[]{2,3,4}; 
    		System.out.println(cerca(v,0)); 
    	} 
    
    
    	public static boolean cerca(int[] v,int i) {
    		if(i == v.length-1 && v[i]%2 == 0) return true;
    		if (v[i]%2!=0) return false;
    		return (cerca(v, i+1)); 
    
    	} 
    }
    
  • Re: Condizione incomprensibile per me

    Grazie
  • Re: Condizione incomprensibile per me

    Faccio una piccola correzione a me stesso: questo ottiene gli stessi risultati in modo leggermente più semplice:
    
    //Controllare se tutti gli elementi di un vettore di interi sono pari
    public class Es { 
    
       public static void main(String[] args) {
          int[] v = new int[]{2,3,4}; 
          System.out.println(cerca(v,0)); 
       } 
    
       public static boolean cerca(int[] v,int i) {
          if(i == v.length) return true;
          if (v[i]%2!=0) return false;
          return (cerca(v, i+1)); 
    
       } 
    }
    
    Comunque se dovessi fare un esercizio del genere scriverei semplicemente questa funzione:
    
    public static boolean cerca(int[] v) {
    	   for(int i=0; i<v.length; i++) {
    		   if(v[i]%2 != 0) return false;
    	   }
    	   return true;
       } 
    
  • Re: Condizione incomprensibile per me

    minomic ha scritto:


    Faccio una piccola correzione a me stesso: questo ottiene gli stessi risultati in modo leggermente più semplice:
    
    //Controllare se tutti gli elementi di un vettore di interi sono pari
    public class Es { 
    
       public static void main(String[] args) {
          int[] v = new int[]{2,3,4}; 
          System.out.println(cerca(v,0)); 
       } 
    
       public static boolean cerca(int[] v,int i) {
          if(i == v.length) return true;
          if (v[i]%2!=0) return false;
          return (cerca(v, i+1)); 
    
       } 
    }
    
    Comunque se dovessi fare un esercizio del genere scriverei semplicemente questa funzione:
    
    public static boolean cerca(int[] v) {
    	   for(int i=0; i<v.length; i++) {
    		   if(v[i]%2 != 0) return false;
    	   }
    	   return true;
       } 
    
    intanto grazie ... un chiarimento:
    il tutto funziona perché nella condizione tutti gli elementi del vettore sono considerati come se fossero un singolo numero?
    perché nel println passiamo zero? sinonimo di pari?
    perché. è necessario un metodo ricorsivo? perché analizza i singoli indici? i+1 serve a questo?

    ciao
  • Re: Condizione incomprensibile per me

    Rispondo in ordine:
    1. ogni elemento del vettore E' un singolo numero, dato che l'array è un vettore di interi. Se fosse un vettore di stringhe allora ogni elemento sarebbe una stringa e così via
    2. no zero in quel caso non è sinonimo di pari. Passiamo zero per dirgli di cominciare ad analizzare il vettore dall'elemento in posizione 0, cioè dal primo. Se passi 1 la funzione inizia ad analizzare il vettore dalla posizione 1, cioè dal secondo elemento
    3. un metodo ricorsivo non è necessario. Spesso la ricorsione semplifica molto la scrittura del codice ma questo non mi sembra il caso. Infatti ti dicevo che avrei scelto un altro approccio: un semplice ciclo for. Diciamo che volendo utilizzare la ricorsione si può fare come abbiamo visto
    4. all'interno della funzione viene richiamata la funzione stessa (ecco la ricorsione) con l'indice i+1 per dire alla funzione di analizzare l'elemento successivo. Tutto questo continua fino a che non è stato analizzato tutto il vettore. In generale con la ricorsione bisogna fare attenzione alla condizione di uscita, cioè al momento in cui si deve smettere di richiamare la funzione. Nel nostro caso si smette quando è stato analizzato tutto il vettore. Sbagliare la condizione di uscita può portare a loop infiniti, eccezioni o comportamenti non prevedibili (e quindi non desiderabili).
  • Re: Condizione incomprensibile per me

    Tutto splendidamente chiaro .... grazie!!!
Devi accedere o registrarti per scrivere nel forum
8 risposte