Elementi array

di il
12 risposte

Elementi array

Salve ragazzi... sto cercando di mettere assieme un po di cose per esercitarmi, e piu' scrivo codice (molto elementare e di qualsiasi genere) e piu' mi rendo conto che si impara molto prima.
ma ogni tanto mi stoppo su cose che credo elementari ma che non riesco a risolvere, forse perche mi mancano delle conoscenze o degli strumenti non ancora spiegati sui libri che sto studiando.

es: sto cercando di individuare quanti numeri pari e dispari ci sono all'interno di un array:

import java.util.*;

public class InserisciNumeri {
	public static void main(String args[]) {
		
		int array [] = {1,22,45,66,78,64,66,78,99,23,27,32};
		int numeriPari = 0;
		int numeriDispari = 0;
		
		System.out.println("Hai inserito "+array.length+" numeri e sono:"+Arrays.toString(array)+"\n");
		
		if (array[2] % 2 == 0) {
			numeriPari++;
		} else {
			numeriDispari++;
		}
		 System.out.println("L'array contiene "+numeriPari+" numeri pari.");
		 System.out.println("L'array contiene "+numeriDispari+" numeri dispari.");
	}
}
-problema: non riesco a far passare tutti gli elementi dell'array in rassegna... sicuramente il costrutto "if" non va bene per questo tipo di lavoro, ma con "while"e "for" mi va ancora peggio.

-leggendo ho visto che java.lang.Arrays mette a disposizione numerosi algoritmi per gli array ma nella doc delle api di java non l'ho trovato.

12 Risposte

  • Re: Elementi array

    fabbio ha scritto:


    -problema: non riesco a far passare tutti gli elementi dell'array in rassegna...
    Serve un ciclo (for, quello classico con indice o anche il nuovo "for-each" di Java 5)

    fabbio ha scritto:


    -leggendo ho visto che java.lang.Arrays mette a disposizione numerosi algoritmi per gli array ma nella doc delle api di java non l'ho trovato.
    Non hai trovato cosa? In java.util.Arrays non ci sono metodi per es. contare i numeri pari, dispari (troppo banali ..).
  • Re: Elementi array

    Il costrutto if serve a testare una condizione.
    I costrutti for/while servono ad eseguire un "ciclo", ovvero a iterare un insieme di istruzioni (generalmente su un insieme di valori) per far sì che queste vengano rieseguite N volte.

    Quindi, a te servono entrambe: un ciclo per scorrere tutti gli elementi dell'array (for oppure while a scelta tua) ed il costrutto if per testare l'i-esimo elemento dell'array.

    for, while e if sono i costrutti essenziali di qualunque linguaggio di programmazione e vanno assolutamente studiati, capiti e padroneggiati. C'è anche il do/while come costrutto di iterazione.


    Ciao.
  • Re: Elementi array

    Si lele/and avete ragione, stavo mettendo assieme un while con un if, perche' effettivamente senza un while o for che snocciala dentro ad un if gli elementi da controllare.....

    cmq grazie lele, grazie and .....
  • Re: Elementi array

    E' stato semplicissimo, 10 minuti !!!!
    
    import java.util.*;
    
    public class InserisciNumeriWhile {
    	public static void main(String args[]) {
    
    		int array [] = {1,22,45,66,78,64,66,78,99,23,27,32};
    		int numeriPari = 0;
    		int numeriDispari = 0;
    		
    		System.out.println("Hai inserito "+array.length+" numeri e sono: "+Arrays.toString(array)+"\n");
    		
    		int elementiArray = array.length;
    		int i = 0;
    		while (i <= elementiArray){
    			if (i % 2 == 0) {
    				numeriPari++;
    			} else {
    				numeriDispari++;
    			}
    			i++;
    			}
    		 System.out.println("L'array contiene "+numeriPari+" numeri pari.");
    		 System.out.println("L'array contiene "+numeriDispari+" numeri dispari.");
    	}
    }
    
    risultato... se pur quasi giusto, non mi ha convinto:
    
    java InserisciNumeriWhile
    Hai inserito 12 numeri e sono: [1, 22, 45, 66, 78, 64, 66, 78, 99, 23, 27, 32]
    
    L'array contiene 7 numeri pari.
    L'array contiene 6 numeri dispari.
    
    i numeri inseriti sono 12, ma il totale dei pari e dispari fa 13... nello specifico ce' un
    dispari in piu.. da dove lo ha preso???
    non me ne faccio capace!!!


    adesso lo miglioro pure
  • Re: Elementi array

    fabbio ha scritto:


    e' stato semplicissimo, 10 minuti !!!!
    Ma è sbagliato.

    fabbio ha scritto:


    		while (i <= elementiArray){
    Innanzitutto qui stai andando "fuori" dall'array. Avendo la lunghezza, la condizione è < non <=

    fabbio ha scritto:


    			if (i % 2 == 0) {
    Qui è sbagliato perché stai usando l'indice ... e non il valore all'indice. Ed è anche per questo che in questo momento non ti schianta con eccezione perché vai fuori dall'array (come indice)!
  • Re: Elementi array

    Sono stato troppo precipitoso...

    allora :

    andbin ha scritto:


    while (i <= elementiArray){
    hai ragione, perche i e' minore di elementiArray, quindi inutile testare l'uguaglianza... quello che non mi e' chiaro e' perche' sto andando fuori dall array.

    andbin ha scritto:


    if (i % 2 == 0) {
    si, sta puntando effettivamente all'indice dell'array e non al valore degli elementi, quindi come fa a funzionare???

    comunque ho corretto ed ora la somma dei pari e dispari e' 12
  • Re: Elementi array

    fabbio ha scritto:


    hai ragione, perche i e' minore di elementiArray, quindi inutile testare l'uguaglianza... quello che non mi e' chiaro e' perche' sto andando fuori dall array.
    Se un array ha 10 elementi, gli indici vanno da 0 a 9 (inclusi).

    for (int i = 0; i < arr.length; i++)

    fabbio ha scritto:


    si, sta puntando effettivamente all'indice dell'array e non al valore degli elementi, quindi come fa a funzionare???
    Perché l'indice è comunque un valore .... stavi testando pari/dispari sull'indice .... non sul contenuto dell'array.
  • Re: Elementi array

    Ecco perche alla fine controllando meglio non fa distinzione fra pari e dispari...devo rivedere il tutto perche non fuziona....

    a dopo e grazie and
  • Re: Elementi array

    fabbio ha scritto:


    devo rivedere il tutto perche non fuziona.... non fa distinzione fra pari e dispari

    a dopo e grazie and
    Sì, infatti andbin te l'ha detto due volte: non stai testando il valore all'i-esima posizione dell'array, ma l'indice "i"... che assumerà tutti i valori da 0 a N-1... e di conseguenza ne avrà la metà pari e la metà dispari.

    Non devi verificare se "i" è pari o dispari, ma se l'elemento "in posizione i all'interno dell'array" è pari o dispari.


    Ciao.
  • Re: Elementi array

    Eccolo.....
    
    import java.util.*;
    
    public class InserisciNumeriWhile {
    	public static void main(String args[]) {
    		
    		int array [] = {1,22,45,66,79,64,65,78,99,23,27,32};
    		int numeriPari = 0;
    		int numeriDispari = 0;
    		
    		System.out.println("Hai inserito "+array.length+" numeri e sono: "+Arrays.toString(array)+"\n");
    		
    		int i = 0;	
    		while (i < array.length){
    			if (array[i] % 2 == 0) {
    				numeriPari++;
    			} else {
    				numeriDispari++;
    			}
    			i++;
    			}
    		
    		 System.out.println("L'array contiene "+numeriPari+" numeri pari.");
    		 System.out.println("L'array contiene "+numeriDispari+" numeri dispari.");
    	}
    }
    
    azzz ora funziona davvero....
    PARERI ??

    mi piace sbagliare, ci ragiono meglio poi!!!

    adesso aggiungo qualche ghirigoro o lo rifaccio con il for!!!!
  • Re: Elementi array

    fabbio ha scritto:


    azzz ora funziona davvero....
    Tecnicamente corretto. Sarebbe solo da scrivere leggermente meglio come stile (indentazioni, ecc...)
  • Re: Elementi array

    Provvedo!!!!
Devi accedere o registrarti per scrivere nel forum
12 risposte