Java - 在使用随机获取文本文件中的行时,尝试避免重复

时间:2018-05-04 21:41:26

标签: java random

我有点受约束,主要是因为我是编程的新手。我是Mass Effect 2 speedrunning社区的一员,我们试图为游戏制作一个随机游戏。基本思想是使用控制台为角色获取随机功能。从本质上讲,这很容易做到,经过一些研究,我设法做了一个,也许没有优化,但你可以在下面找到工作程序。

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Random;


  public class Main {
     public static void main(String [ ] args) throws IOException {
        FileInputStream fs = null;
          try {
          fs = new FileInputStream("powers.txt");
        } catch (FileNotFoundException e1) {
          e1.printStackTrace();
      }
        PrintStream out = new PrintStream("powers2.txt");
        System.setOut(out);
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));
        ArrayList<String> array = new ArrayList<>();
        int i=1;
        System.out.println("GiveTalentPoints 50");
        System.out.println("RemovePower self SFXPower_Incinerate_Engineer");
        System.out.println("RemovePower self SFXPower_IncendiaryAmmo_Engineer");
        System.out.println("RemovePower self SFXPower_CombatDrone_Engineer");
        System.out.println("RemovePower self SFXPower_AIHacking_Engineer");
        System.out.println("RemovePower self SFXPower_CryoFreeze_Engineer");
        System.out.println("RemovePower self SFXPower_Overload_Engineer");
        System.out.println("RemovePower self SFXPower_AntiOrganicAmmo_Player");
        String line;{
            do {
            try {
                while((line = br.readLine()) != null)
                    array.add(line);
            } catch (IOException e) {
                e.printStackTrace();
        }
        // variable so that it is not re-seeded every call.
            Random rand = new Random();

        // nextInt is exclusive. Should be good with output for array.
            int randomIndex = rand.nextInt(array.size());

        // Print the powers
            System.out.print("GivePower self ");
            System.out.println(array.get(randomIndex));
            System.out.print("SetRank self ");
            System.out.print(array.get(randomIndex));
            System.out.println(" 3");
            i=i+1;
    }   
    while (i<=5);       
}
out.flush();
out.close();
fs.close();
}
}

这样有效。我们的想法是创建一个文本文件然后在游戏控制台中执行。现在我的主要问题是,这可以给我重复。如果随机值落在同一条线上,我将拥有相同功率的两倍,这在游戏中是不可能的。因此,我需要一种方法来制作“独占”随机值,或者在打印文件后再进行检查,如果完成,重新启动程序,直到我没有任何重复项。我希望我有意义,我确信这是一个简单的解决方案,但编码并不是我的主要领域,我真的很难学习它。

提前致谢。 另外我知道我的缩进可能不好,我只是想让它在网站的代码中读取。遗憾!

0 个答案:

没有答案