Java创建一种方法来读取和重新排列现有数组的元素

时间:2018-12-04 20:10:05

标签: java arrays shuffle

我一直在仔细研究这些链接: Randomly select an item from a list printing an array from .txt file java How to shuffle the contents of an array

但是他们和帮助一样使我感到困惑?

我很确定我要使用

public static void shuffle `(String[] array)` // mix-up the array

但我不确定行

(String[] array)

正在引用。

我想有一个读取数组的方法(需要先读取它,这样它才知道要随机洗什么??),将其洗一下,然后保存新的文本文件;或读取一个数组并从列表中拉出一个随机数组。

我对如何与字符串一起使用ArrayList感到困惑。

如何告诉Java要读取什么文件?我如何准确地告诉它如何解析正在阅读的内容。我应该逐行阅读并随机抽出一条线给我看吗?

public static void Encounter()

Scanner wildInput = new Scanner(new File("WildPkmn.txt"));

randomGenerator = new Random();

    }
}
See:
}

2 个答案:

答案 0 :(得分:2)

您首先需要阅读文件,可以按照以下步骤进行操作:

List<String> result;
try (Stream<String> stream = Files.lines(Paths.get("WildPkmn.txt"))) {
     result = stream.collect(toList());
} catch (IOException e) { e.printStackTrace(); }

然后,我建议将您的方法签名更改为:

public static void shuffle (List<String> source){
      // look into Collections.suffle
      // etc..
}

或者您可能想完全摆脱该方法,因为Collections.suffle是一行代码...

但是,假设您严格需要一个数组并根据该数组执行进一步的逻辑,则可以将上面的第一个示例片段更改为:

String[] result;
try (Stream<String> stream = Files.lines(Paths.get("WildPkmn.txt"))) {
     result = stream.toArray(String[]::new);
} catch (IOException e) { e.printStackTrace(); }

希望这是您进行逻辑操作的好起点...

答案 1 :(得分:1)

我不明白您为什么不简单地利用List和Collection的shuffle方法。播放以下内容。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class Test {
    public static final String file = "WildPkmn.txt";

    public static void main(String[] args) {
        List<String> list = null;
        try {
            list = readFromFile(file);
        } catch (IOException | NullPointerException e) {
            e.printStackTrace();
        }

        System.out.println(list);
        Collections.shuffle(list);
        System.out.println(list);

    }

    public static List<String> readFromFile(String fileName) throws IOException {
        Stream<String> stream = Files.lines(Paths.get(fileName));
        return stream.collect(Collectors.toList());
    }
}

如果字符串数组已经存在,

String[] tokens = ...;
Collections.shuffle(Arrays.asList(tokens));