从Java中的ArrayList打印随机输入的值

时间:2015-03-25 21:55:18

标签: java sorting search random arraylist

我正在以随机顺序处理ArrayList的元素,通常是将它们打印出来。我想检测随机选择的索引是0还是1,以便对这些情况执行特殊处理,其中索引0的处理部分取决于索引{{ 1}}之前已被处理过。具体来说,处理索引1时不会立即打印任何内容,但如果处理它,则随后处理索引1时,索引0和索引1值印刷。无论如何,循环在十次迭代之后或在处理索引0之后退出,以先到者为准。

我尝试使用0语句来实现这一点,但那里存在明显的缺陷。我到处寻找任何例子,但没有找到。我已经开始考虑使用排序算法或线程来保存找到的第一个值然后继续循环,直到它看到第二个打印它。我将不胜感激任何帮助。

这是我的代码:

if

2 个答案:

答案 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)

根据您的描述,这些是您的申请的基本要求:

  1. 按随机顺序处理ArrayList
  2. 处理=随机选择索引的打印值
  3. 尝试10次处理列表中的项目。
  4. 检测随机索引是1还是0。 如果1     不处理,但标记它被选中。 如果0&amp;&amp; 1被标记     过程0和1     出口
  5. 如果这些要求是正确的,以下是我提出的实施方案:

    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”的方法中,以便于阅读,以使其与您的描述更紧密地对齐。

    反馈意见:)