Problema ArrayList

di il
10 risposte

Problema ArrayList

Salve a tutti, sono Alessandro e sono uno studente Universitario, ho riscontrato un problema con gli ArrayList
Devo creare una Lista dove viene inserito un numero di telefono e ti permette di votare un concorrente.
Il problema sta nel fatto che entrato nel for mi da errore di Index out-of-bounds, se metto size -1 mi entra correttamente.
Ma se per esempio inserisco il numero di telefono 091 me lo va a sostituire all'utente 0 che ha come numero "0000" e una volta che rientra nel for (tramite menu iniziale) e reinserisco 091 me lo mette nella posizione 1, e l'indice 0 non lo vede più.

Questa è la parte di codice che da problemi:
ArrayList <Utente> ListaUtenti = new ArrayList<>(4);
	Utente utente = new Utente(0000, VotiRimanenti);
	ListaUtenti.add(utente);
	
	System.out.print("Inserisci numero di telefono: ");
	numTel = in.nextLong();
	size = ListaUtenti.size() - 1;
	for(i = 0; i <= size; i++){     // SE NON METTO <= non mi entra nel ciclo
		for(j = 0; j < size; j++){
			if(numTel == ListaUtenti.get(j).getTelefono()){
				System.out.println("VECCHIO UTENTE");
				break;
			}
		}
		if(numTel != ListaUtenti.get(j).getTelefono() && numTel != ListaUtenti.get(i).getTelefono()){
			ListaUtenti.add(new Utente(numTel, VotiRimanenti));
			System.out.println("NUOVO UTENTE");
	 		break;
		}	
	}

10 Risposte

  • Re: Problema ArrayList

    Sarebbe utile vedere tutto il codice, comunque io tratterei i numeri telefonici come stringhe visto che hanno uno o più zeri davanti
  • Re: Problema ArrayList

    Questo è il Main
    import java.util.Scanner;
    import java.util.ArrayList;
    
    public class Gara{
    	public static void main(String args[]){
    		int scelta = 0;	
    		int sceltaconcorrente;
    		int size;
    		int i = 0;	
    		int j = 0;
    		int VotiRimanenti = 5;
    		int VotiRicevuti = 0;
    		int VotiInviati = 0;
    		long numTel;
    
    		ArrayList <Utente> ListaUtenti = new ArrayList<>(4);
    		Utente utente = new Utente(0000, VotiRimanenti);
    		ListaUtenti.add(utente);
    	
    		ArrayList <Concorrente> ListaConcorrenti = new ArrayList<>();		
    		Concorrente concorrente = new Concorrente("", "", 0);	
    		concorrente = new Concorrente("Salmo", "Lebon", 0);
    		ListaConcorrenti.add(concorrente);
    		concorrente = new Concorrente("Lady", "Gaga", 0);
    		ListaConcorrenti.add(concorrente);
    		concorrente = new Concorrente("Imagine", "Dragons", 0);
    		ListaConcorrenti.add(concorrente);
    
    		ArrayList <Giurati> ListaGiurati = new ArrayList<>();
    		ListaGiurati.add(new Giurati(0000, 1));
    		ListaGiurati.add(new Giurati(0001, 1));
    		ListaGiurati.add(new Giurati(0002, 1));	
    
    		Scanner in = new Scanner(System.in);
    		while(scelta != 6){
    			System.out.println("\n[MENU PRINCIPALE]");
    			System.out.println("Premi 1 per inserire un voto");
    			System.out.println("Premi 2 per vedere quanti voti sono arrivati");
    			System.out.println("Premi 3 per stampare il numero dei voti ricevuti da ciascun cantante");
    			System.out.println("Premi 4 se fai parte della giuria");
    			System.out.println("Premi 5 per vedere i concorrenti votati dai giudici");
    			System.out.println("Premi 6 per uscire");			
    			System.out.print("Scelta: ");			
    			scelta = in.nextInt();
    
    			if(scelta == 1){
    				System.out.print("Inserisci numero di telefono: ");
    				numTel = in.nextLong();
    				size = ListaUtenti.size() - 1;
    				System.out.println(size);
    				for(i = 0; i <= size; i++){
    					for(j = 0; j < size; j++){
    						if(numTel == ListaUtenti.get(j).getTelefono()){
    							System.out.println("VECCHIO UTENTE");
    							break;
    						}
    					}
    					if(numTel != ListaUtenti.get(j).getTelefono() && numTel != ListaUtenti.get(i).getTelefono()){
    						ListaUtenti.add(new Utente(numTel, VotiRimanenti));
    						System.out.println("NUOVO UTENTE");
    						break;
    					}	
    				}									
    				System.out.println("Benvenuto hai ancora " + ListaUtenti.get(j).getVotiRimanenti() + " voti a disposizione");			
    				int vot = ListaUtenti.get(j).getVotiRimanenti() - 1;
    				ListaUtenti.get(j).setVotiRimanenti(vot);
    				System.out.println("[Lista concorrenti]");
    				for(i = 0; i < ListaConcorrenti.size(); i++)
    					System.out.println("Premi " + i + " per votare: " + ListaConcorrenti.get(i));						
    				System.out.print("Scegli chi votare: ");
    				sceltaconcorrente = in.nextInt();
    			
    				System.out.println("\nHai votato " + ListaConcorrenti.get(sceltaconcorrente));
    				VotiRicevuti = ListaConcorrenti.get(sceltaconcorrente).getVotiRicevuti();				
    				ListaConcorrenti.get(sceltaconcorrente).setVotiRicevuti(VotiRicevuti + 1);
    				VotiInviati++;					
    			}
    			
    			if(scelta == 2){
    				System.out.println("\nIn questo momento sono arrivati: " + VotiInviati + " voti");
    			}
    
    			if(scelta == 3){
    				System.out.println("\n[VOTI RICEVUTI DA CIASCUN CANTANTE]");
    				for(i = 0; i < ListaConcorrenti.size(); i++){
    					int voti = ListaConcorrenti.get(i).getVotiRicevuti();
    					Concorrente cantante = ListaConcorrenti.get(i);
    					System.out.println("Il concorrente " + cantante + " ha ricevuto " + voti + " voti");
    			}
    			}
  • Re: Problema ArrayList

    Inoltre un ArrayList si può ordinare rispetto ad una variabile?
    Per esempio il mio ArrayList ha la variabile intera VotiRicevuti, quindi vorrei mettere chi ha ricevuto più voti in alto, in modo decrescente.
  • Re: Problema ArrayList

    patel ha scritto:


    Sarebbe utile vedere tutto il codice....
    se quello che hai mostrato è completo non sono in grado di aiutarti
  • Re: Problema ArrayList

    Vuoi anche le classi cosi puoi eseguirlo?
  • Re: Problema ArrayList

    patel ha scritto:


    Sarebbe utile vedere tutto il codice, comunque io tratterei i numeri telefonici come stringhe visto che hanno uno o più zeri davanti
    questo avevo detto io
  • Re: Problema ArrayList

    Risolto con un foreach grazie lo stesso!
  • Re: Problema ArrayList

    ATTENZIONE: il foreach e' SOLO una versione piu' comoda del for

    QUINDI se prima NON funzionava ed ora si, vuol dire che PRIMA avevi scritto del codice SGANGHERATA/sbagliato



    Meditate, gente, meditate

    Added:

    E' ti ho trovato pure il pasticcio! Almeno il piu' ovvio legato all'outofbounds
    
    List<...> l = new ArrayList<>();
    int size = l.size()
    
    size contiene la lunghezza della lista, cioe' il numero di elementi

    MA

    gli indici vanno da 0 a size-1 NON da 0 a size

    Quindi si scrive:
    
    for(int i=0; i<size; ++i) ...
    
    OPPURE
    
    for(int i=0; i<=size-1; ++i) ...
    
    NON
    
    for(int i=0; i<=size; ++i) ...
    
  • Re: Problema ArrayList

    Grazie mille Migliorabile, finalmente sono riuscito a comprendere l'ArrayList e ho migliorato il mio metodo di scrittura, volevo chiedere un ultima cosa prima di chiudere la discussione, siccome devo ordinare l'ArrayList in ordine crescente o decrescente, ho trovato questo @Override del metodo compareTo(); Ma non riesco a capire che operazioni fa, potresti spiegarmele?
        @Override
        public int compareTo(Student comparestu) {
            int compareage=((Student)comparestu).getStudentage();  //Precisamente qua
            return this.studentage-compareage;
        }
  • Re: Problema ArrayList

    Basta cercare "sorting arraylist"
Devi accedere o registrarti per scrivere nel forum
10 risposte