我已成功将代码复制到数组中(实际上是所有201个国家/地区及其互联网使用级别的列表)。该列表按字母顺序排列,我想随机化数据,以便数组中的数据没有顺序。这是我的代码:
import java.util.*;
import java.io.*;
public class Unsort {
public static void main(String[] args) throws IOException {
String[] countries = new String[201];
String[] percentages = new String[201];
String[] line = new String[201];
Scanner keyboard = new Scanner(System.in);
Scanner fileIN = new Scanner(new File("F:/CountrySortedAlpha.txt"));
PrintWriter out = new PrintWriter("F:/CountryUnsortedAlpha.txt");
while(fileIN.hasNext()){
for(int i = 0; i < 201; i++){
line[i] = fileIN.nextLine();
System.out.print(line[i] + " " + i + "\n");
}
for(int i = 0; i < 201; i ++){
int randomize = (int) (Math.random() * 201);
System.out.print("\n" + randomize);
}
}
}
}
我一直在尝试的方法是创建一个随机数来访问数组,但最终会发生很多冲突。第二个循环只是为了确保随机变量有效。所以我的问题是:在使用随机数生成器时,如何在没有冲突的情况下随机化数组中的数据?但是,我不能使用java API预先定义的算法。
答案 0 :(得分:1)
也许这需要一些额外的代码行,但你可以
答案 1 :(得分:0)
如果我理解你的问题,你有一个包含国家名称和每行的互联网使用情况的文件,并且你想要创建一个包含相同数据(在每一行)但在不同行中的新文件(随机化) ),你可以看看这个:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class RandomizeData {
public static void main(String[] args){
ArrayList<String> fileData = new ArrayList<String>(); // arraylist is more dynamic
Scanner fileIN = null;
PrintWriter out = null;
try {
fileIN = new Scanner(new File("C:\\Users\\Yahya\\Desktop\\SortedData.txt")); // for example
out = new PrintWriter(new File("C:\\Users\\Yahya\\Desktop\\UnSortedData.txt")); // for example
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while(fileIN.hasNext()){ // read the entire file of sorted data
fileData.add(fileIN.nextLine());// add each line to the arraylist
}
List<Integer> indexRef = new ArrayList<Integer>(); // create arraylist of integers to be as indices reference
for(int i=0; i<fileData.size(); i++){
indexRef.add(i); // populate it
}
Random rnd = new Random();
for(int i=0; i<fileData.size(); i++){ // for every index (line from the file)
int rndIndex = indexRef.get(rnd.nextInt(indexRef.size())); // create random index
out.println(fileData.get(rndIndex)); // get the data at that index in the arraylist
indexRef.remove(indexRef.indexOf(rndIndex)); // then remove the index from the indexRef arraylist in order not to use it again
}
out.close(); // close the printwriter
}
}
示例强> 我在SortedData文件中:
Canada 200
Ireland 500
Syria 100
U.K 400
U.S.A 300
输出:UnSortedData文件:
U.K 400
Ireland 500
U.S.A 300
Syria 100
Canada 200