[英]How would I return one string at a time from a 2d array and not have any repeating ouputs until i have used the entire list?
我正在嘗試做一個從二維字符串數組中選擇五個名稱之一並將其返回的東西。 我一次只想返回一個名字,所以我正在使用方法,但我也希望這些名字在生成所有名字之前不會重復。 我找到了幾乎是我需要的東西。 但是 output 仍在列表中,如果我將它放在一個方法中,它只會重復。
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
static void runArray() {
String[] peoples = {"Person 1", "Person 2", "Person 3", "Person 4"};
List<String> names = Arrays.asList(peoples);
Collections.shuffle(names);
for (String name : names) {
System.out.println(name + " ");
}
}
public static void main(String[] args) {
runArray();
}
}
這樣做的一種方法是每次要處理一個名稱時從列表中隨機刪除一個項目,並在列表中還有更多名稱時繼續這樣做。
例如
private static final Random R = new Random(System.currentTimeMillis());
private static String getRandomFromList(List<String> list) {
final int index = r.nextInt(list.size());
return list.remove(index);
}
private static void processName(String name) {
// do stuff here
}
public static void main(String[] args) {
final String[] peoples = {"Person 1", "Person 2", "Person 3", "Person 4"};
final List<String> names = Arrays.stream(peoples).collect(Collectors.toList());
while (!names.isEmpty()) {
final String name = getRandomFromList(names);
// Now do your processing for the name here e.g.
processName(name);
}
}
因此,您可以調用getRandomFromList
4 次(在上面的示例中),每次都獲得一個隨機名稱,然后您可以對其進行處理。 我沒有假設特定數量的條目,而是將其放入一個 while 循環中,檢查是否還有剩余的名稱。
如果您需要按順序調用它,您可以執行如下操作。 最好確保列表中確實有名字,如果沒有,你可以寫出錯誤並提前返回,或者拋出異常。
if (names.isEmpty()) {
return; // or log error, or throw exception
}
String name = getRandomFromList(names);
// do stuff with first name
if (names.isEmpty()) {
return; // or log error, or throw exception
}
name = getRandomFromList(names);
// do stuff with second name
// etc.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.