2017-05-26 97 views
1

我有我需要用来设置标签的文本的字符串ArrayList。 到目前为止,我已经尝试了许多解决方案,但似乎都没有工作。从ArrayList中删除元素时使用

我想从ArrayList中随机取一个字符串来设置我的Label文本,然后从ArrayList中删除这个字符串,所以如果我按下一个位于同一个面板中的按钮,它会呈现一个新的字符串在标签中,但它从不显示已显示的字符串。

这是我迄今为止所做的。

我试着从List类中删除方法,但它似乎不工作。

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

当您尝试从'ArrayList'中删除字符串时会发生什么?在获得值后简单添加'domande1.remove(idx)'有什么问题? – Flaom

+0

只需要注意,如果你的最终项目使用那些20'String'的更多值。我会改变这个逻辑来将'List'开头转换为'LinkedList'。那么每次只需获取第一个值('list.remove(0)'),这将会将O(n)的读数转换为O(1),因为您不需要在中间找到值。 – AxelH

+0

在尝试提出更多问题之前,请阅读[我如何提出一个好问题?](http://stackoverflow.com/help/how-to-ask)。 –

回答

-1

用户列表迭代器,并使用iteraotor.remove()代替list.remove()

+2

我不认为OP实际上正在迭代列表。 –

1

你的代码看起来很好,但我从来没有看到你真正消除任何。试试这个版本:

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

纠正我,如果我错了,但'List.remove(int)'返回已移除的实例,不是?所以它可以完成而不是'List.get(int)'。 – AxelH

+0

@AxelH很好地了解API。 –

+0

不是那么好;)这样,迭代只完成一次找到索引。 – 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

更简单

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

remove(int index)方法返回被删除的元素。

-1

作为替代方案,请设置您的列表。随机播放清单 - Collections.shuffle(list) - 然后按顺序清除混洗元素:0,1,2,3 ...