2017-05-26 5 views
1

Ich habe eine ArrayList von Strings, die ich verwenden muss, um den Text eines Labels festzulegen. Bis jetzt habe ich viele Lösungen ausprobiert, aber keine scheint zu funktionieren.Element aus ArrayList entfernen, wenn es verwendet wird

Ich möchte eine Zeichenfolge zufällig aus der ArrayList nehmen, um meinen Label-Text festzulegen und diese Zeichenfolge dann aus der ArrayList zu entfernen. Wenn ich also eine Schaltfläche im selben Panel drücke, wird eine neue Zeichenfolge angezeigt im Etikett, aber es zeigt nie eine bereits gezeigte Zeichenkette an.

Das habe ich bisher gemacht.

Ich versuchte mit Remove-Methode von List-Klasse, aber es scheint nicht zu funktionieren.

package milionarioesame; 

import java.awt.Color; 
import java.awt.Font; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Random; 
import javax.swing.JLabel; 

/** 
    * Descrive l'etichetta su cui verrà visualizzata la domanda. 
*/ 
public class Question extends JLabel 
{ 
Font cms = new Font("Comic Sans MS", 0, 30); 

String d1 = new String("Alessandro Manzoni, noto"); 
String d2 = new String("Quale di queste città NON fa provincia nel Lazio?"); 
String d3 = new String("Se si moltiplicano fra di loro tutte le cifre che si trovano sul telefono fisso, si ottiene"); 
String d4 = new String("Quale di questi animali vive in acque marine?"); 
String d5 = new String("Cosa significa edulcorare?"); 
String d6 = new String("Quanti sono i cuccioli di dalmata rapiti in un famoso film Disney?"); 
String d7 = new String("Quale tra questi noti best-seller di Stephen King è ambientato in una prigione?"); 
String d8 = new String("Quale di questi pianeti è più vicino al Sole?"); 
String d9 = new String("Quale tra questi NON è il nome di una moneta?"); 
String d10 = new String("Quanti sono i magi che si recano a visitare Gesù bambino?"); 
String d11 = new String("Chi era la bella indiana dai capelli neri dell'omonimo film Disney?"); 
String d12 = new String("Se sentite tubare, affianco a voi avete"); 
String d13 = new String("Come si chiama il neonato reale d'Inghilterra?"); 
String d14 = new String("In quale Land della Germania si trova la città di Monaco?"); 
String d15 = new String("Tra queste squadre di calcio quale è l'unica ad avere sul suo stemma l'anno di fondazione? "); 
String d16 = new String("Quale di questi musicisti NON ha mai fatto parte dei Queen?"); 
String d17 = new String("Com'è intitolato il settimo libro della celebre saga del mago Harry Potter?"); 
String d18 = new String("Qual è l'ultima nazione vincitrice del campionato del mondo di calcio?"); 
String d19 = new String("Sulla tavola degli elementi, \"Au\" indica"); // sequenza di escape 
String d20 = new String("Se ammiro il mare da Piazza dell'Unità d'Italia, mi trovo a"); 

String[] aDomande1 = {d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20}; 

ArrayList<String> domande1 = new ArrayList(Arrays.asList(aDomande1)); 

String dom = new String(); 
int idx = 0; 

public Question() 
{ 
    setFont(cms); 
    setForeground(Color.WHITE); 
    setHorizontalAlignment(JLabel.CENTER); 
    setText(setDomanda()); 
} 

public String setDomanda() 
{ 
    Random rand = new Random(); 
    idx = rand.nextInt(domande1.size()); 
    dom = domande1.get(idx); 
    return dom; 
} 

}

+3

Was passiert, wenn Sie versuchen, eine Zeichenfolge aus der 'ArrayList' zu entfernen? Was ist falsch daran, 'domande1.remove (idx)' einfach hinzuzufügen, nachdem Sie den Wert erhalten haben? – Flaom

+0

Nur zu beachten, wenn Ihr letztes Projekt mit mehr Wert arbeitet, dass diese 20 'String'. Ich würde diese Logik ändern, um die 'List' am Anfang in eine' LinkedList' zu mischen. dann hole einfach jedes Mal den ersten Wert ('list.remove (0)'), dies verwandelt ein Lesen von O (n) in O (1), da du keinen Wert in der Mitte finden musst. – AxelH

+0

Bitte lesen Sie [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask), bevor Sie weitere Fragen stellen. –

Antwort

-1

Benutzerliste Iterator und verwenden iteraotor.remove() anstelle von list.remove()

+2

Ich glaube nicht, dass das OP tatsächlich über die Liste iteriert. –

1

Ihr Code sieht gut aus, aber ich sehe dich nie wirklich etwas zu entfernen. Versuchen Sie, diese Version:

public String setDomanda() { 
    Random rand = new Random(); 
    idx = rand.nextInt(domande1.size()); 
    return domande1.remove(idx); // remove the string and return it 
} 
+1

Korrigieren Sie mich, wenn ich falsch liege, aber 'List.remove (int)' gibt die entfernte Instanz zurück, nein? Also könnte es anstelle der 'List.get (int)' gemacht werden. – AxelH

+0

@AxelH Gut, dass Sie die API so gut kennen. –

+0

Nicht so gut;) Auf diese Weise wird die Iteration nur einmal durchgeführt, um den Index zu finden. – AxelH

-1
public void removeRandom() 
{ 
    Random rand = new Random(); 
    idx = rand.nextInt(domande1.size()); 
    System.out.println("before remove size = "+ domande1.size()); 
    domande1.remove(idx); 
    System.out.println("after remove size = "+ domande1.size()); 
} 
-1

Noch einfacher

public String setDomanda() { 
    Random rand = new Random(); 
    idx = rand.nextInt(domande1.size()); 
    return domande1.remove(idx); 
} 

Die remove(int index) Methode das entfernte Element zurück.

-1

Als Alternative, richten Sie Ihre Liste ein. Mischen Sie die Liste - Collections.shuffle(list) - und wählen Sie dann die gemischten Elemente der Reihe nach aus: 0, 1, 2, 3, ...

Verwandte Themen