Autore Topic: Quiz: evitare la ripetizione di domande  (Letto 529 volte)

Offline gionninnoig

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Redmi 4 Pro
  • Play Store ID:
    gionninnoig
  • Sistema operativo:
    Windows 7
Quiz: evitare la ripetizione di domande
« il: 09 Agosto 2017, 19:59:25 CEST »
0
Buona sera, la mia intenzione è quella di creare un quiz con tre button per le risposte.
Ho utilizzato diversi array di stringhe per la memorizzazione di domande e risposte possibili e per la generazione di domande utilizzo numeri randomici, ma non riesco ad evitare la ripetizione di domande.
Quando uso la funzione per generare la domanda genero anche un numero random e avevo pensato a una possibile soluzione: memorizzare il numero random in un array di int. Cosi prima di chiamare nuovamente la funzione per generare la domanda controllo che quel numero random non sia già stato utilizzato. Vi sembra una soluzione possibile o vi è un metodo più semplice da attuare? Grazie per l'attenzione  :-)

Offline iClaude

  • Utente normale
  • ***
  • Post: 301
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Quiz: evitare la ripetizione di domande
« Risposta #1 il: 09 Agosto 2017, 20:55:55 CEST »
+1
Potresti creare un ArrayList di oggetti contenenti le domande e le relative risposte, mescolarlo con shuffle, quindi recuperare un elemento alla volta in ordine.
La tua soluzione non è ottimale perché mano a mano che completi il quiz aumenta la probabilità di generare gli stessi numeri casuali precedenti.
« Ultima modifica: 09 Agosto 2017, 21:05:15 CEST da iClaude »

Offline gionninnoig

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Redmi 4 Pro
  • Play Store ID:
    gionninnoig
  • Sistema operativo:
    Windows 7
Re:Quiz: evitare la ripetizione di domande
« Risposta #2 il: 10 Agosto 2017, 13:04:44 CEST »
0
Allora, ho creato l'ArrayList in un activity in questo modo:
Codice (Java): [Seleziona]
 public class ArrayListDomande {
        public void main(String[] args){
            ArrayList v = new ArrayList();
            v.add("uno");
            v.add("due");
            v.add("tre");
        }
    }
Nel file xml ho creato una TextView e un Button, come posso stampare gli elementi dell'ArrayList?
Mi serve per vedere se funziona lo shuffle.

Offline iClaude

  • Utente normale
  • ***
  • Post: 301
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Quiz: evitare la ripetizione di domande
« Risposta #3 il: 10 Agosto 2017, 15:52:09 CEST »
+1
Vedi:
https://www.tutorialspoint.com/java/util/collections_shuffle.htm

Cmq, visto che le risposte sono collegate alle domande ti consiglio di creare un POJO contente sia la domanda che la relativa risposta e creare un ArrayList di tali oggetti.

Offline gionninnoig

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Redmi 4 Pro
  • Play Store ID:
    gionninnoig
  • Sistema operativo:
    Windows 7
Re:Quiz: evitare la ripetizione di domande
« Risposta #4 il: 13 Agosto 2017, 11:57:24 CEST »
0
Cmq, visto che le risposte sono collegate alle domande ti consiglio di creare un POJO contente sia la domanda che la relativa risposta e creare un ArrayList di tali oggetti.

Non sono molto ferrato con la programmazione, quindi ti chiedo di andarci piano hahahah. Scherzi a parte, ho letto qualcosa riguardo i POJO e a quanto ho capito avrei il vantaggio di avere una struttura sempre fissa e di effettuare il set e get per ogni domanda. Dico bene?
Comunque per come ho creato la struttura credo mi basterebbe utilizzare uno shuffle che mescola x interi (non so se è fattibile, sto ipotizzando) dove x è il numero delle domande. Cosi avrei un susseguirsi di quelle x domande e relative risposte. Quindi invece di usare i numeri random potrei creare un array di int, mescolarlo e utilizzarli come indice per le domande?

Offline iClaude

  • Utente normale
  • ***
  • Post: 301
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Quiz: evitare la ripetizione di domande
« Risposta #5 il: 13 Agosto 2017, 20:45:23 CEST »
0
Non sono molto ferrato con la programmazione, quindi ti chiedo di andarci piano hahahah. Scherzi a parte, ho letto qualcosa riguardo i POJO e a quanto ho capito avrei il vantaggio di avere una struttura sempre fissa e di effettuare il set e get per ogni domanda. Dico bene?
Comunque per come ho creato la struttura credo mi basterebbe utilizzare uno shuffle che mescola x interi (non so se è fattibile, sto ipotizzando) dove x è il numero delle domande. Cosi avrei un susseguirsi di quelle x domande e relative risposte. Quindi invece di usare i numeri random potrei creare un array di int, mescolarlo e utilizzarli come indice per le domande?

Sì, puoi anche fare così se ti sembra più semplice.

Offline gionninnoig

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Redmi 4 Pro
  • Play Store ID:
    gionninnoig
  • Sistema operativo:
    Windows 7
Re:Quiz: evitare la ripetizione di domande
« Risposta #6 il: 20 Agosto 2017, 14:23:03 CEST »
0
Sto provando a fare una cosa strana ma dovrebbe funzionare.
Ho creato un arraylist di int con numeri che vanno da 0 a n-1, dove n è il numero delle mie domande.
Codice (Java): [Seleziona]
ArrayList<Integer> numeri = new ArrayList<Integer>();Poi mescolo l'arraylist:
Codice (Java): [Seleziona]
Collections.shuffle(numeri);Adesso, dato che la mia funzione non accetta arraylist, vorrei convertire l'arraylist in un array normale. Come faccio?
Ho provato con:
Codice (Java): [Seleziona]
int [] mescola = numeri.toArray(new Integer[]);Ma mi da il seguente errore: "array initializer expected".
Come risolvo?

Offline iClaude

  • Utente normale
  • ***
  • Post: 301
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Quiz: evitare la ripetizione di domande
« Risposta #7 il: 21 Agosto 2017, 10:15:47 CEST »
0
Devi creare un array della stessa lunghezza della lista e passarlo come parametro del metodo toArray. L'array viene riempito con gli elementi della lista.
Nella documentazione é tutto spiegato.

Offline gionninnoig

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Redmi 4 Pro
  • Play Store ID:
    gionninnoig
  • Sistema operativo:
    Windows 7
Re:Quiz: evitare la ripetizione di domande
« Risposta #8 il: 21 Agosto 2017, 17:39:23 CEST »
0
Ok ho risolto, molte grazie  :-)