【问题标题】:Java Create a method to read and shuffle elements of an existing arrayJava 创建一个方法来读取和打乱现有数组的元素
【发布时间】:2018-12-05 04:30:50
【问题描述】:

我一直在研究这些链接: 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:
}

【问题讨论】:

  • 我建议使用 Collections.shuffle 而不是重新发明自己的。

标签: java arrays shuffle


【解决方案1】:

您首先需要阅读您的文件,可以按如下方式完成:

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 是一行代码...

但是,假设您严格想要一个数组并在此基础上执行进一步的逻辑,那么您可以将上面的第一个示例 sn-p 更改为:

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

希望这是您继续逻辑的良好开端...

【讨论】:

    【解决方案2】:

    我不明白你为什么不简单地利用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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-04
      • 2011-06-03
      • 2015-08-04
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多