Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个随机数生成器(卡交易)_Java_Random_Numbers_Generator - Fatal编程技术网

Java 两个随机数生成器(卡交易)

Java 两个随机数生成器(卡交易),java,random,numbers,generator,Java,Random,Numbers,Generator,我需要这部分代码的帮助。本部分涉及生成2个随机数,并使用该随机数同时在2个标签框中的每个框中显示一张卡。这里的问题是随机数没有正确生成,因此卡片没有正确显示(有重复,有时没有显示,等等) 我的代码的基本知识: 让我们假设h是代码另一部分的变量,它是介于1和53之间的任何数字(每个数字都与卡有关)。如果生成的随机数(非重复)与变量h匹配,则计时器停止 因此,这基本上就像拥有一副牌,然后将牌均匀地分发给两个人,但在这里,一旦随机抽取的一张牌(数字)的数字匹配,交易就会停止 (l3、l4为标签名称)

我需要这部分代码的帮助。本部分涉及生成2个随机数,并使用该随机数同时在2个标签框中的每个框中显示一张卡。这里的问题是随机数没有正确生成,因此卡片没有正确显示(有重复,有时没有显示,等等)

我的代码的基本知识: 让我们假设h是代码另一部分的变量,它是介于1和53之间的任何数字(每个数字都与卡有关)。如果生成的随机数(非重复)与变量h匹配,则计时器停止

因此,这基本上就像拥有一副牌,然后将牌均匀地分发给两个人,但在这里,一旦随机抽取的一张牌(数字)的数字匹配,交易就会停止

(l3、l4为标签名称) 全局变量:

    Random rng = new Random();
    List<Integer> generated = new ArrayList<Integer>();
    List<Integer> generated2 = new ArrayList<Integer>();
    int l3count;
    int l4count;
    int Ulim = 53;
    int Llim = 1;
    int next;
    int check;
    int h;
    int next2;
    int Ulim2 = 53;
    int Llim2 = 1;



final int p = h;
            int delay2 = 1000;
    final Timer timer2 = new Timer();
      timer2.schedule(new TimerTask(){
     public void run(){

      for (int i = 1; i < 53; i++)
    {
        while(true)
        {
             next = rng.nextInt(Ulim) + Llim;
            if (!(generated.contains(next)||generated.contains(next2)))
            {

                generated.add(next);
                break;
            }

            next2 = rng.nextInt(Ulim2) + Llim2;
            if (!(generated.contains(next)||generated.contains(next2)))
            {

                generated.add(next2);
                break;
            }


        }

        String a = Integer.toString(next);
            String c = "C:\\Users\\mycompname\\Desktop\\deck\\"+a+".png";

             String d = Integer.toString(next2);
            String e = "C:\\Users\\mycompname\\Desktop\\deck\\"+d+".png";

            for(int j = 1;j<=53;j++)
            {
            if(j%2==0)
            {l3.setIcon(new ImageIcon(c));
           }
            else
            {l4.setIcon(new ImageIcon(e));    
           }
            }


            if(next==p||next2==p)
            check=10;    
          break;
    }
      if(check==10)
      timer2.cancel();
    timer2.purge();
      }

      },delay2, 1000);
Random rng=new Random();
生成的列表=新的ArrayList();
List generated2=新的ArrayList();
整数计数;
整数计数;
int Ulim=53;
int-Llim=1;
int-next;
整数检查;
int-h;
int next2;
int Ulim2=53;
int Llim2=1;
最终int p=h;
int delay2=1000;
最终定时器timer2=新定时器();
timer2.时间表(新TimerTask(){
公开募捐{
对于(int i=1;i<53;i++)
{
while(true)
{
next=rng.nextInt(Ulim)+Llim;
if(!(生成的.contains(下一个)|生成的.contains(下一个)))
{
已生成。添加(下一步);
打破
}
next2=rng.nextInt(Ulim2)+Llim2;
if(!(生成的.contains(下一个)|生成的.contains(下一个)))
{
生成。添加(next2);
打破
}
}
字符串a=Integer.toString(下一个);
String c=“c:\\Users\\mycompname\\Desktop\\deck\\\”+a+“.png”;
字符串d=Integer.toString(next2);
String e=“C:\\Users\\mycompname\\Desktop\\deck\\\”+d+“.png”;

对于(int j=1;j你最好随机出牌

使用
O(n)
可以一次将一张卡从一个阵列传递到另一个阵列

你将卡传递到的每个新阵列都将是不同的人的手牌

继续从牌组阵列中每次向每个阵列添加1张牌,直到每个玩家拥有规则要求的牌数

另外,不要依赖于随机数相等。请参阅。寻找其他模式。就像随机数的卡%cards_离开,你应该停止发放卡

根据请求使用代码示例进行更新

public static void shuffle (int[] array) {
    for(int n = array.length; (n > 1);) {
        int k = gen.nextInt(n--);
        int temp = array[n];
        array[n] = array[k];
        array[k] = temp;
    }
}

你最好是随机出牌

使用
O(n)
可以一次将一张卡从一个阵列传递到另一个阵列

你将卡传递到的每个新阵列都将是不同的人的手牌

继续从牌组阵列中每次向每个阵列添加1张牌,直到每个玩家拥有规则要求的牌数

另外,不要依赖于随机数相等。请参阅。寻找其他模式。就像随机数的卡%cards_离开,你应该停止发放卡

根据请求使用代码示例进行更新

public static void shuffle (int[] array) {
    for(int n = array.length; (n > 1);) {
        int k = gen.nextInt(n--);
        int temp = array[n];
        array[n] = array[k];
        array[k] = temp;
    }
}

明显的问题是生成了一个数字0(包括)和n(不包括)。因此,当您超过53的限制时,您生成的值介于0和52之间-这是53个可能的值,并且没有那么多卡片。因此,将上限更改为52

另外,正如其他答案所指出的,你之所以会遇到冲突(将同一张牌交给多手牌)等,是因为你不想随机选择牌。实际上,你想随机洗牌


尝试改用a。

明显的问题是生成数字0(包括)和n(不包括)。因此,当您超过53的限制时,您生成的值介于0和52之间-这是53个可能的值,并且没有那么多卡片。因此将上限更改为52

另外,正如其他答案所指出的,你之所以会遇到冲突(将同一张牌交给多手牌)等,是因为你不想随机选择牌。实际上,你想随机洗牌


请尝试改用FFS。如果您需要帮助,请帮助我们使其可读,并对您的听众表示尊重。如果您需要帮助,请帮助我们使其可读,并对您的听众表示尊重。如果您需要帮助,请帮助我们使其可读,并对您的听众表示尊重。您的意思是:var rand=new Random();for(inti=cards.Length-1;i>0;i--){intn=rand.Next(i+1);inttemp=cards[i];cards[i]=cards[n];cards[n]=temp;}该死的两行代码!-:P-我已经用代码示例更新了我的答案。你的意思是基本上使用这个:var rand=new Random();for(inti=cards.Length-1;i>0;i--){int n=rand.Next(i+1);int temp=cards[i];cards[i]=cards[n];cards[n]=temp;}该死的两行代码!-:P-我用代码示例更新了我的答案。