我正在以随机顺序处理ArrayList
的元素,通常是将它们打印出来。我想检测随机选择的索引是0
还是1
,以便对这些情况执行特殊处理,其中索引0
的处理部分取决于索引{{ 1}}之前已被处理过。具体来说,处理索引1
时不会立即打印任何内容,但如果处理它,则随后处理索引1
时,索引0
和索引1
值印刷。无论如何,循环在十次迭代之后或在处理索引0
之后退出,以先到者为准。
我尝试使用0
语句来实现这一点,但那里存在明显的缺陷。我到处寻找任何例子,但没有找到。我已经开始考虑使用排序算法或线程来保存找到的第一个值然后继续循环,直到它看到第二个打印它。我将不胜感激任何帮助。
这是我的代码:
if
答案 0 :(得分:0)
您需要将随机生成的索引存储到全局变量中,并在每次生成随机数时更新它。它应该是这样的。
public static void random_sortType(){
types = new ArrayList<String>();
types.add("Start");
types.add("Starting");
types.add("Load");
types.add("Loading");
types.add("End");
` int previousIndex;
ran = new Random();
int listSize = types.size();
String tempEventType;//the temp variable intended to hold temporary values
for(int i = 0; i < 10; i++){ //the loop goes round the ArrayList 10 times
int index = ran.nextInt(listSize);//this produces the random selection of the elements within the list
previous_index =index;
if(index == 0){
out.println(types.get(index));
out.println();
break;
}
if(index == 1){
tempEventType = types.get(index);
if(previousIndex == 0){
temp EventType = types.get(0) + " " + types.get(1);
out.println(tempEventType);
break;
}
答案 1 :(得分:0)
根据您的描述,这些是您的申请的基本要求:
如果这些要求是正确的,以下是我提出的实施方案:
import java.util.ArrayList;
import java.util.Random;
import static java.lang.System.*;
public class RandomSort {
private static final int MAX_ATTEMPTS = 10;
private static boolean wasOneSelected = false;
public static void main(String[] args) {
ArrayList<String> types = new ArrayList<>(5);
types.add("Start");
types.add("Starting");
types.add("Load");
types.add("Loading");
types.add("End");
random_sortType(types);
}
public static void random_sortType(ArrayList<String> types) {
Random ran = new Random();
int lastIndex = types.size() - 1; // index range is from 0 to 4
for (int i = 0; i < MAX_ATTEMPTS; i++) {
int index = ran.nextInt(lastIndex);
if ( (index == 0) && wasOneSelected) {
process(types.get(index) + " " + types.get(index + 1));
break;
} else if (index == 1) {
wasOneSelected = true;
} else {
process(types.get(index));
}
}
}
public static void process(String str) {
out.println("Processing: " + str);
}
}
这里的关键是包含boolean wasOneSelected初始化为false。一旦设置为true,在应用程序的持续时间内它将永远不会再为false。 if-else块处理循环中的所有分支,我倾向于将println调用包装到一个名为“process”的方法中,以便于阅读,以使其与您的描述更紧密地对齐。
反馈意见:)