Java 我的随机数组给出了相同的答案,但它应该是不同的

Java 我的随机数组给出了相同的答案,但它应该是不同的,java,arrays,random,Java,Arrays,Random,我让我的代码以预期的方式工作,但是当我尝试创建多个排列列表时,它会给我第一个排列列表,并且不会改变它。 我需要使用Arraylist创建一个从1到10的排列列表,并捕获代码中可能出现的一个错误。然后我们必须复制代码,这样我们就可以得到9行不同的排列 import java.util.ArrayList; import java.util.Random; public class Permutations { ArrayList <Integer> Perm = new A

我让我的代码以预期的方式工作,但是当我尝试创建多个排列列表时,它会给我第一个排列列表,并且不会改变它。 我需要使用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();
        }
    }

在置换生成器的末尾,递归调用相同的方法。在这一点上,变量Print中已经有10个随机元素


每次执行置换生成器方法时,都需要清空Print变量,以便执行while循环。在您的例子中,Print变量始终具有相同的10个元素,因此while循环只在第一次执行,并且Print变量永远不会被修改。

在置换生成器的末尾,您递归调用了相同的方法。在这一点上,变量Print中已经有10个随机元素


每次执行置换生成器方法时,都需要清空Print变量,以便执行while循环。在您的例子中,Print变量始终具有相同的10个元素,因此while循环仅在第一次执行,并且Print变量从未被修改。

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

if(List < 10)
    {
        Print.removeAll(Print);
        PermutationGenerator();
    }
if(列表<10)
{
Print.removeAll(打印);
置换生成器();
}

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

if(List < 10)
    {
        Print.removeAll(Print);
        PermutationGenerator();
    }
if(列表<10)
{
Print.removeAll(打印);
置换生成器();
}
导入java.util.ArrayList;
导入java.util.Random;
公共类置换{
ArrayList Perm=新的ArrayList();
ArrayList Print=新的ArrayList();
int计数器=9;
int List=1;
公共无效ArrayList(){
永久性增加(1);
每增加(2);
第二次添加(3);
第二次添加(4);
第二次添加(5);
每增加(6);
永久性增加(7);
永久性增加(8);
永久性增加(9);
永久性增加(10);
}
公共无效置换生成器(){
ArrayList();
Random rand=新的Random();
整数值=rand.nextInt(10)+1;
//名单:1-9
while(Print.size()<10){
试一试{
while(Print.contains(value)){
值=兰特·耐克斯汀(10)+1;
}
打印。添加(值);
Perm.remove(值);
}捕获(IndexOutOfBoundsException a){
System.out.println(“”);
}
}
System.out.println(“List”+List+:“+Print.toString());
列表++;
如果(列表<10){
Print.removeAll(打印);
置换生成器();
}
}
公共静态void main(字符串[]args){
置换置换=新置换();
置换。置换生成器();
}
}
导入java.util.ArrayList;
导入java.util.Random;
公共类置换{
ArrayList Perm=新的ArrayList();
ArrayList Print=新的ArrayList();
int计数器=9;
int List=1;
公共无效ArrayList(){
永久性增加(1);
每增加(2);
第二次添加(3);
第二次添加(4);
第二次添加(5);
每增加(6);
永久性增加(7);
永久性增加(8);
永久性增加(9);
永久性增加(10);
}
公共无效置换生成器(){
ArrayList();
Random rand=新的Random();
整数值=rand.nextInt(10)+1;
//名单:1-9
while(Print.size()<10){
试一试{
while(Print.contains(value)){
值=兰特·耐克斯汀(10)+1;
}
打印。添加(值);
Perm.remove(值);
}捕获(IndexOutOfBoundsException a){
System.out.println(“”);
}
}
System.out.println(“List”+List+:“+Print.toString());
列表++;
如果(列表<10){
Print.removeAll(打印);
置换生成器();
}
}
公共静态void main(字符串[]args){
置换置换=新置换();
置换。置换生成器();
}
}

我认为,一旦您的打印尺寸为10,它就不再执行while循环并反复打印同一个循环。因此,我是否需要将所有值重置为原始值才能正常工作?为什么您认为它应该打印不同的值?你能描述一下是哪一部分负责的吗?代码运行一次并得到第一行,然后我在底部有一个while循环,继续运行生成器,因为随机函数,所以另一行不同。我认为一旦你的打印大小为10,它就不再执行while循环,并一遍又一遍地打印相同的循环。我需要将所有值重置为原始值才能工作吗你认为它应该打印不同的值吗?你能描述一下是哪一部分造成的吗?代码运行一次并得到第一行,然后在底部的while循环中,它继续运行生成器,因此由于随机函数,另一行不同。因此,如果我删除all(list)if(list<10){PermutationGenerator()}另一个技巧:最好尝试迭代解决方案并避免递归。它现在似乎可以工作了,谢谢,我没有意识到循环在第一次之后没有被激活。如果我删除了all(list)if(list<10){PermutationGenerator();}另一个提示:最好尝试一个迭代解决方案,避免递归。它现在似乎可以工作了,谢谢你,我没有意识到循环在第一次之后没有被激活
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();
    }
}