Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22

    !PROBLEMA: Trovare elementi doppi in un array

    Ciao a tutti ragazzi! Ho iniziato quest'anno la facolt� di economia informatica all'universit� e ho alcuni problemi con java! Non riesco ancora ad entrare completamente nel suo mondo e questa cosa mi fa incazzare, perch� mi piacerebbe imparare ad usare questo linguaggio molto bene.

    Vi spiego il mio problema, il mio professore ha assegnato questo esercizio:

    Scrivere un metodo
    public static boolean primaOccorrenza (int[]a, int pos)
    che, preso come parametro un array di numeri interi a e un intero pos, senza modificare il contenuto dell�array, restituisce true se e solo se l�elemento in posizione pos non compare nell�array a nelle posizioni da 0 a posâ€1. Se a vale null, viene restituito false. Se pos � fuori dagli indici ammissibili per l�array, viene restituito false. Ad esempio, se a={5,3,7,7,3,10,5} e pos = 2, il metodo deve restituire true in quanto l�elemento 7 compare per la prima volta in posizione 2.

    ed io ho cercato di risolverlo in questo modo, senza risultato:


    public static void main(String[] args) {
    // TODO Auto-generated method stub

    int []array={5,3,7,7,3,10,5};
    int numero=2;



    System.out.print ("presente una sola volta:");
    System.out.println(primaOccorrenza(array,numero));


    }

    public static boolean primaOccorrenza (int[]a, int pos){

    boolean primaOcc=false;

    for (int i=0; i<a[pos-1]; i++){
    if (a[i]!=a[pos]){
    primaOcc=true;
    }
    } primaOcc=false;
    return primaOcc;
    }
    }

    cosa sto sbagliando? grazie mille!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    ed io ho cercato di risolverlo in questo modo, senza risultato:
    Qui:
    for (int i=0; i<a[pos-1]; i++){

    è sbagliato. Se pos è 2, con il tuo array di esempio il valore a quella posizione pos-1 è 3. NON devi andare per i<3 ma per i<2
    Quindi non il valore ma la posizione.
    Tieni anche presente che non servirebbe nemmeno la variabile primaOcc.
    Ultima modifica di andbin; 20-01-2017 a 18:54
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Quindi in parole povere come dovrei scrivere? L'esercizio mi chiede di controllare l'Array dalla posizione 0 all'ipotetica e variabile posizione POS. Quest'ultima non la indico, scrivendo a[pos]? Se la risposta è si, allora perché è sbagliato quello che ho scritto? non ho detto di effettuare un ciclo finché la posizione a[i] non fosse minore di quella di POS? Ho parecchia confusione al momento. Grazie di nuovo a tutti.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    perché è sbagliato quello che ho scritto?
    i<a[pos-1] è sbagliato per quello che devi fare. Lo ripeto: Se viene passato pos = 2, tu devi verificare gli indici 0 e 1 (appunto i < 2)
    Mentre adesso pos-1 vale 1 e a[1] vale 3. Non devi fare i < 3 ma i < 2 !!


    P.S. ho sbagliato a scrivere prima io 7.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Per concretizzare quello che mi hai suggerito, dovrei scrivere: for (int=0; i<pos; i++), ma questo non avrebbe senso perché a questo punto pos non verrebbe più indicato come una posizione, ma come un valore qualsiasi. Dico bene?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Per concretizzare quello che mi hai suggerito, dovrei scrivere: for (int=0; i<pos; i++), ma questo non avrebbe senso perché a questo punto pos non verrebbe più indicato come una posizione, ma come un valore qualsiasi. Dico bene?
    "se l'elemento in posizione pos non compare nell'array a nelle posizioni da 0 a pos-1"

    Quindi se viene passato es. pos = 5, tu devi verificare se il valore in a[5] NON si trova negli indici 0, 1, 2, 3 e 4 al fine di dare true.
    Ovvero se il valore a[5] è la prima occorrenza, ovvero ancora NON si trova nella parte precedente.

    Pertanto il senso giusto è appunto i<pos
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Quindi se nel ciclo for (int i=0, i<pos, i++) non specifico l'array a, quest'ultimo mi cicla comunque lo stesso al suo interno? Io avevo sempre scritto A[POS] perché pensavo che così mettessi in chiaro che quel POS fosse una posizione dell'array A e non un valore qualsiasi. Ugualmente però continua a darmi problemi:




    public static boolean primaOccorrenza (int[]a, int pos){

    for (int i=0; i<pos; i++){
    if (a[i]!=pos){
    return true;
    }
    } return false;
    }

    In stampa mi da sempre true....

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Mi sto perdendo in un bicchiere d'acqua, lo so...ma continua a darmi errore...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Quindi se nel ciclo for (int i=0, i<pos, i++) non specifico l'array a, quest'ultimo mi cicla comunque lo stesso al suo interno?
    Questo ciclo for di per sé non ha nulla direttamente a che fare con gli array o altro. Quello che fa è semplicemente far andare il valore di una variabile ( i ) da un valore x ad un valore y a passi di 1, ciclo per ciclo.
    Se pos vale 5, i valori che i assume ad ogni ciclo sono 0, 1, 2, 3 e 4. Cosa rappresentano questi valori? Nulla in particolare, non per il for perlomeno. Potrebbero rappresentare delle coordinate X sul piano cartesiano, potrebbero essere dei fattori di moltiplicazione per altro, potrebbero essere il conteggio delle patate che hai in casa.
    Cosa rappresentano lo devi sapere tu e chiaramente userai i in modo opportuno per quello che appunto sai di dover fare.

    Se poi questa variabile i la usi come indice in un array a[i] allora vuol dire "il valore contenuto all'indice i". Stop tutto qui.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Io avevo sempre scritto A[POS] perché pensavo che così mettessi in chiaro che quel POS fosse una posizione dell'array A e non un valore qualsiasi.
    No, non è così che va pensato, infatti.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Ugualmente però continua a darmi problemi:

    codice:
    		public static boolean primaOccorrenza (int[]a, int pos){
    			
    		   for (int i=0; i<pos; i++){
    			  if (a[i]!=pos){
    				return true;
    			  }
    		   } return false;
    		}
    Qui ci sono 2 problematiche, una anche a livello di logica, di "ragionamento".
    Innanzitutto non devi confrontare pos. Questo è solo un indice. Devi confrontare a[pos] (un valore ben preciso nell'array che è quello richiesto dalla posizione pos) con TUTTI gli altri valori precedenti, a[0], a[1] ecc.... fino a a[pos-1]. Il indice i va appunto da 0 fino a pos-1.

    Quindi un elemento da confrontare è a[i] (i 0...pos-1) e l'altro è a[pos]

    Ora c'è la questione più di "ragionamento". Immagina che pos sia 4 (quindi gli indici da verificare sono 0, 1, 2, 3). Se all'indice 0 NON trovi lo stesso valore che c'è in a[pos], cosa puoi dire subito? Assolutamente nulla. Non è uguale a quello all'indice 0 ma potrebbe trovarsi all'indice 1, 2, o 3.

    Il succo è semplice: se trovi lo stesso valore, allora puoi SUBITO dire che a[pos] NON è la prima occorrenza (false). Se non lo trovi non puoi dedurre nulla subito, devi andare avanti e cercare ad altri indici.

    Se hai esaurito il for cosa puoi dedurre? Che il valore a[pos] NON si trova agli indici precedenti ... e quindi il valore in a[pos] è la "prima occorrenza".
    Ultima modifica di andbin; 21-01-2017 a 12:30
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Grazie mille!!

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.