当我的随机数组应该有所不同时,它会给我相同的答案

时间:2016-01-28 02:46:50

标签: java arrays random

我让我的代码以预期的方式工作,但是当我尝试制作多个排列列表时,它给了我第一个并且不会改变它。 我需要使用Arraylist制作1到10的排列列表,并捕获代码中可能出现的一个错误。然后我们必须复制该代码,以便我们得到9个不同的排列行。

 import java.util.ArrayList;
import java.util.Random;
public class Permutations
{

    ArrayList <Integer> Perm = new ArrayList <Integer> ();
    ArrayList <Integer> Print = new ArrayList <Integer> ();
    int counter = 9;
    int List = 1;
    public void ArrayList()
    {
        Perm.add(1);
        Perm.add(2);
        Perm.add(3);
        Perm.add(4);
        Perm.add(5);
        Perm.add(6);
        Perm.add(7);
        Perm.add(8);
        Perm.add(9);
        Perm.add(10);
    }

    public void PermutationGenerator()
    {
        ArrayList();
        Random rand = new Random();
        int value = rand.nextInt(10) + 1;
        while(Print.size() < 10)
        {
            try
            {
                while(Print.contains(value))
                {
                    value = rand.nextInt(10) + 1;
                }
                Print.add(value);
                Perm.remove(value);
            }
            catch(IndexOutOfBoundsException a)
            {
                System.out.println("");
            }
        }
        System.out.println("List" + List + ":" + Print.toString());
        List++;
        if(List < 10)
        {
            PermutationGenerator();
        }
    }

这是打印出来的:

List1:[9,6,5,4,10,2,8,7,1,3]    
List2:[9,6,5,4,10,2,8,7,1,3]    
List3:[9,6,5,4,10,2,8,7,1,3]    
List4:[9,6,5,4,10,2,8,7,1,3]    
List5:[9,6,5,4,10,2,8,7,1,3]    
List6:[9,6,5,4,10,2,8,7,1,3]    
List7:[9,6,5,4,10,2,8,7,1,3]    
List8:[9,6,5,4,10,2,8,7,1,3]     
List9:[9,6,5,4,10,2,8,7,1,3] 

3 个答案:

答案 0 :(得分:1)

在PermutationGenerator的末尾,递归地调用相同的方法。在这一点上,变量Print已经有10个随机元素。

每次执行PermutationGenerator方法时,都需要清空Print变量,因此执行while循环。在您的情况下,Print变量始终具有相同的10个元素,因此while循环仅在第一次执行,而Print变量永远不会被修改。

答案 1 :(得分:0)

import java.util.ArrayList;
import java.util.Random;

public class Permutations {

    ArrayList<Integer> Perm = new ArrayList<Integer>();
    ArrayList<Integer> Print = new ArrayList<Integer>();
    int counter = 9;
    int List = 1;

    public void ArrayList() {
        Perm.add(1);
        Perm.add(2);
        Perm.add(3);
        Perm.add(4);
        Perm.add(5);
        Perm.add(6);
        Perm.add(7);
        Perm.add(8);
        Perm.add(9);
        Perm.add(10);
    }

    public void PermutationGenerator() {
        ArrayList();
        Random rand = new Random();
        int value = rand.nextInt(10) + 1;
        //list: 1-9
        while (Print.size() < 10) {
            try {
                while (Print.contains(value)) {
                    value = rand.nextInt(10) + 1;
                }
                Print.add(value);
                Perm.remove(value);
            } catch (IndexOutOfBoundsException a) {
                System.out.println("");
            }
        }
        System.out.println("List" + List + ":" + Print.toString());
        List++;
        if (List < 10) {
            Print.removeAll(Print);
            PermutationGenerator();
        }
    }
    public static void main(String[] args) {
        Permutations permutations = new Permutations();
        permutations.PermutationGenerator();
    }
}

答案 2 :(得分:-1)

如果我将这一行添加到最后的while循环中,我得到了答案。

[]