将文本文件输入到数组,从数组中的文本文件中随机化数据,输出随机数据以分离文本文件

时间:2017-04-30 18:26:21

标签: java arrays random data-structures

我已成功将代码复制到数组中(实际上是所有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预先定义的算法。

2 个答案:

答案 0 :(得分:1)

也许这需要一些额外的代码行,但你可以

  • 根据数组
  • 创建一个列表
  • 使用Collections.shuffle
  • 如果需要,从洗牌列表中创建一个数组。

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