Stampare in modo casuale e non consecutivo elemento arraylist

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    andbin ha scritto:


    flashmaster ha scritto:


    Collections.shuffle(nomi);
    Iterator<String> it = nomi.iterator();
    System.out.println(it.next());
    L'uso di Iterator va benissimo. Ed è pure "furbo" perché puoi sapere facilmente se c'è un prossimo elemento oppure no.
    Ma devi fare un ciclo: finché ci sono elementi, stampi. Dopo aver stampato la stringa, chiedi all'utente se continuare o no. Ma attenzione, fai la richiesta all'utente solo se non sei già all'ultimo elemento! (ed è qui che torna utile il Iterator !).
    Io avevo pensato a provato un ciclo while
    
    Collections.shuffle(nomi);
    Iterator<String> it = nomi.iterator();
    while(it.hasNext())
    System.out.println(it.next());
    ma cosi stampa tutti gli elementi e non singolarmente, il mio scopo è quello di chiedere all'utente se generare un altro nome casuale finché l'utente non dice no, ma se Iterator non va bene per questo, cosa mi consigli di fare?
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    flashmaster ha scritto:


    
    while(it.hasNext())
    System.out.println(it.next());
    
    while (it.hasNext()) {
        System.out.println(it.next());
        
        // QUI chiedi all'utente S/N (tranne se hai già stampato l'ultimo elemento!)
        // se "No", break; esce dal ciclo / altrimenti ripete
    }
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Per far si che non si generino nomi uguali ai precedenti puoi anche controllare se il nome generato è uguale a qualcuno già presente nell'array
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    andbin ha scritto:


    flashmaster ha scritto:


    
    while(it.hasNext())
    System.out.println(it.next());
    
    while (it.hasNext()) {
        System.out.println(it.next());
        
        // QUI chiedi all'utente S/N (tranne se hai già stampato l'ultimo elemento!)
        // se "No", break; esce dal ciclo / altrimenti ripete
    }
    Ciao io ho provato a fare cosi per evitare che si generano nomi uguali consecutivi, ma non funziona, se io metto il break non mi chiede più se generare un altro nome
    while(it.hasNext()) {
    
    System.out.println(it.next());
    				
    if (it.next() == nomi.get(0)) {
    					
    System.out.println(it.next());
    					
    }
    				
    else if (it.next() == nomi.get(1)) {
    					
    System.out.println(it.next());
    }
    				
    //				else
    //					
    //					System.out.println(it.next());
    
    if (check == true) {
    
    }
    
    else
    
    richiedi();
    }
    Questa parte serve per vedere se l'arraylist è vuoto, se lo è non chiede se generare un altro nome altrimenti lo chiede
    if (check == true) {
    
    }
    
    else
    
    richiedi();
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    flashmaster ha scritto:


    Ciao io ho provato a fare cosi per evitare che si generano nomi uguali consecutivi
    Ma non serve se mescoli la lista ....
    Collections.shuffle(nomi);
    
    Iterator<String> itr = nomi.iterator();
    
    while (itr.hasNext()) {
        System.out.println(itr.next());
    
        if (itr.hasNext()) {
            // chiedi se continuare
            if ( /*...no...*/ ) {
                break;
            }
        }
    }
    Più di così ....
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    andbin ha scritto:


    flashmaster ha scritto:


    Ciao io ho provato a fare cosi per evitare che si generano nomi uguali consecutivi
    Ma non serve se mescoli la lista ....
    Collections.shuffle(nomi);
    
    Iterator<String> itr = nomi.iterator();
    
    while (itr.hasNext()) {
        System.out.println(itr.next());
    
        if (itr.hasNext()) {
            // chiedi se continuare
            if ( /*...no...*/ ) {
                break;
            }
        }
    }
    Più di così ....
    Questo è il mio metodo per chiedere se generare un altro nome
    public void richiedi() {
    		
    		String scelta;
    	
    		do {
    
    			System.out.println();
    			System.out.print("Vuoi far generare un altro nome? (Y/N): ");
    			scelta = sca.next();
    			
    			if (scelta.equalsIgnoreCase("Y"))
    				
    			stampaNomeCasuale();
    			
    			else if (scelta.equalsIgnoreCase("N")) {
    				
    				System.out.println("FINE");
    				System.out.println();
    				
    				System.out.println("Lista Nomi");
    				
    				for (int i=0; i<nomi.size(); i++) {
    					
    					System.out.println("Il " + (i + 1) + "° " + nomi.get(i));
    					
    				}
    				
    				break;
    			}
    			
    			else
    				
    				System.out.println("Comando errato!");
    			
    		}
    
    		while (!scelta.equalsIgnoreCase("Y"));
    
    	}
    quindi se io uso il metodo shuffle non serve l'if che hai fatto?
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Suggerisco di usare un ciclo for senza incasinarti di if-else
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Losquincio ha scritto:


    Suggerisco di usare un ciclo for senza incasinarti di if-else
    Al posto del while uso il for ciclando sull'arraylist, togliendo l'if else tu come faresti?
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Si può stampare l'arraylist in ordine di inserimento dei nomi dopo aver usato il metodo shuffle? per es. se io inserisco
    1. mario
    2. gino
    3.luca

    voglio che me li stampi in questo stesso ordine
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Fatti una copia prima dello shuffle e usa due arraylist diversi a seconda di quello che vuoi fare...
  • Re: Stampare in modo casuale e non consecutivo elemento arraylist

    Weierstrass ha scritto:


    Fatti una copia prima dello shuffle e usa due arraylist diversi a seconda di quello che vuoi fare...
    Ok grazie c'è l'ho fatta a stampare i nomi in ordine
Devi accedere o registrarti per scrivere nel forum
25 risposte