随机播放阵列算法 - Java

时间:2016-03-30 08:52:52

标签: java arrays algorithm sorting

我正在编写一个程序,用于读取.txt的链接并解除数组中的链接,因此稍后可以随机访问这些链接。

这就是我所做的(而且它不起作用:D):

import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Scan{

        public static void main(String[] args) throws FileNotFoundException{
        String test = "";
        int i = 0;
        int temp = 0;


        Scanner link = new Scanner(new File("links.txt"));
        while(link.hasNextLine()){
            test = link.nextLine();
            temp++;
        }
        link.close();

        String[] links = new String[temp];

        Scanner urls = new Scanner(new File("links.txt"));

        for (i = 0; i < temp; i++)
        {
            test = urls.nextLine();
            links[i] = test;
            System.out.println("Sorted: " + links[i]);
        }
        urls.close();
        System.out.println("Size of LINKS: " + temp);        


                    // - - - - - - - - - - - - - - - - - - - - - //
                    //  Start of the unsorting algorithm         //
                    //  (It's just not working, need a new one)  //
                    // - - - - - - - - - - - - - - - - - - - - - //

        String[] copy = new String [temp];
        int[] used = new int [temp];
        for(i = 0; i < temp; i++)
        {
            for (int k = 0; k < temp; k++)
            {
                    int j = (int) (Math.random() * temp);
                    //System.out.println(j);
                    if (j == used[k])
                    {
                        k--;
                    }
                    else
                    {
                        used[k] = j;
                        copy[j] = links[i];
                    }

            }
            System.out.println(links[i]);            
        }
    }
}

编辑:我当前的未分类算法显示其起始顺序上的所有链接。

2 个答案:

答案 0 :(得分:0)

问题出在第二个循环中,您正在选择随机索引$(document).ready(function(){ var refreshDivContent = function(divid) { $.ajax({ url: "path", cache: false, success: function(data) { $('#' + divid).html(data); setTimeout(function() { refreshDivContent(divid); }, 5000); } }); }; refreshDivContent('homescore'); // Use it }); ,但是您应该检查j何时应该检查used[k] == j

所以一个解决方案是创建一个方法Does the array used contain j来检查它是否已经存在。或者另一个简单的解决方案:

boolean contains(int[] arr, int val)

如果您想要ArrayList<String> links = //read from file ArrayList<String> unsorted = new ArrayList<String>(); while(links.size() != 0) { unsorted.add( links.remove( (int)(Math.random()*links.size()) ) ); }

中的输出,可以使用unsorted.toArray()

答案 1 :(得分:0)

你为什么要重新发明轮子?

List<String> list = Arrays.asList(links);
Collections.shuffle(list);
String[] copy = list.toArray(new String[temp]);

如果您使用List而不是数组,那么您的代码会更简单。