从给定列表中选择随机字符串
我想让Java从给定列表中选择1个随机字符串。字符串列表的从给定列表中选择随机字符串
实施例:
1153 3494 9509 2 0 0 0 0
1153 3487 9509 2 0 0 0 0
1153 3491 9525 2 0 0 0 0
1153 3464 9513 2 0 0 0 0
每一行是1串
的想法是,它选择一个,等待一定时间(如7200秒)和取代了以前的串列表中的另一个随机字符串(可能是相同的)。 循环有点无限。
有谁知道如何做到这一点?
Ps。 我几乎noobie用java:S,所以我只是说我应该使用arraylist(例如)不会工作:P
public static void main(String[] args) throws InterruptedException {
List<String> my_words = new LinkedList<String>();
my_words.add("1153 3494 9509 2 0 0 0 0");
my_words.add("1153 3487 9509 2 0 0 0 0");
my_words.add("1153 3491 9525 2 0 0 0 0");
my_words.add("1153 3464 9513 2 0 0 0 0");
Random rand = new Random();
while (true) {
int choice = rand.nextInt(my_words.size());
System.out.println("Choice = " + my_words.get(choice));
Thread.sleep(1000);
int replaceTo = rand.nextInt(my_words.size());
System.out.println("Replace to = " + my_words.get(replaceTo));
my_words.set(choice, my_words.get(replaceTo));
}
}
如果你有一个数据列表/数组,并且你想选择一个随机元素从列表中。最简单的可能是用Math.random(http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html)函数生成一个随机数,该函数介于0和你的列表/数组的数量。
然后,您可以创建一个永久运行的线程,并在执行期间休眠7200秒,以产生一个新的随机数并替换旧的变量。
使用多线程时,请注意并发问题,请阅读http://download.oracle.com/javase/tutorial/essential/concurrency/。
更新(例):
Java有可以使用的,只要你想添加和删除数据的列表。然后可以通过给列表提供数据位于列表中的索引(数字)来提取数据。
因此,您将创建一个列表,然后在列表的范围内生成一个随机数(0作为列表的最大大小)。然后通过给列表提供随机索引,从列表中提取数据。一个例子是:
List<String> my_words = new LinkedList<String>();
my_words.add("1153 3494 9509 2 0 0 0 0");
my_words.add("1153 3487 9509 2 0 0 0 0");
my_words.add("1153 3491 9525 2 0 0 0 0");
my_words.add("1153 3464 9513 2 0 0 0 0");
//Maybe a loop to load all your strings here...
Random random = new Random(); //Create random class object
int randomNumber = random.nextInt(my_words.size()); //Generate a random number (index) with the size of the list being the maximum
System.out.println(my_words.get(randomNumber)); //Print out the random word
希望这样做更有意义,再次考虑java.util中的Random类。会更容易敲打你的头。
我真的不明白这一点......我给我的字符串数字左右?并使math.random选择了一个随机数呢?我遇到的问题是将数字math.random恢复为原始字符串。如果你的意思是字符串是由math.random生成的。字符串本身不能由java生成。它应该只从一个给定的字符串列表中挑选一个 – JJx 2011-03-20 13:13:44
顺便说一句,我包含了一个顶部列表的例子现在 – JJx 2011-03-20 13:24:16
哇!谢谢!所以如果我在我的代码中实现它,它只会选择其中一个字符串? :O但是,我怎样才能使每7200秒取代之前的随机数字:S顺便说一下,当我想在我的代码中的其他地方使用它时,randomNumber是如何定义的?就像'my_words'一样? – JJx 2011-03-20 13:41:23
既然你说你是新来的Java,这是一个完整的示例类选择从一个字符串列表随机元素:
package com.jmcejuela.lab;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class SO {
static final int SLEEP_TIME = 2 * 1000; //expressed in milliseconds
static public void main(String[] args) throws InterruptedException {
List<String> list = new ArrayList<String>();
list.add("hi");
list.add("hello");
list.add("booya!");
Random rg = new Random();
String randomElement;
int listSize = list.size();
/* No sense in randomizing when the list has 0 or 1 element
* Indeed rg.nextInt(0) throws an Exception.
* You should also check, maybe in a method, that the list
* is not null before calling list.size()
*/
if (listSize < 2)
return;
while(true) {
randomElement = list.get(rg.nextInt(listSize));
System.out.println(randomElement);
Thread.sleep(SLEEP_TIME);
}
}
}
然后,你想要什么,最终实现?例如,使用类似的代码你可以设置一个类变量。很可能你想要一个单独的线程来运行这个代码。
哇!谢谢! :O,那是否也替换了之前的字符串? :O型。顺便说一句,计时器是2 * 1000? 噢,如果我想在我的代码中的其他地方使用它,那么它是如何定义的? – JJx 2011-03-20 13:46:03
这很难解释,但它的游戏私人服务器。这些字符串是产生某物的坐标:物品产生,在7200秒后消失,并在列表中的一个坐标处重新生成。 我可以把它放在一个单独的线程中:P – JJx 2011-03-20 13:52:17
是的,它取代了以前的字符串。 Thread.sleep的输入以毫秒表示,所以2 * 1000表示2秒。写7200或任何你想要的。其余的你必须更具体。 – juanmirocks 2011-03-20 13:53:27
嗯,我试图找出ArrayList中,但我还挺失败的.. – JJx 2011-03-20 13:18:17
Regardint下面的答案 - 我想你应该在你的queston更精确,也许尝试对其进行修改。写出你有什么情况:例如一个线程或多个线程? – smas 2011-03-20 13:59:02