Java 需要有关arraylist绑定的帮助(家庭作业)

Java 需要有关arraylist绑定的帮助(家庭作业),java,arraylist,Java,Arraylist,从袋子里取出2颗豆子 如果: 它们都是黑色的,将其中一个放回袋子并丢弃 另一个 一个是黑色的,另一个是白色的。把白色的豆子放回袋子里 把黑豆扔掉 两个都是白色的。丢弃两个,在袋子里放一个黑豆 最后一颗豆子是什么颜色的 您决定编写一个可以运行50次模拟的程序。 从一包10个bean开始,然后继续运行程序 将袋中的豆子数量增加一个,直到 测试了一袋60颗豆子。在袋子里装上任意颜色的巧克力 豆子和豆子从袋子里随机抽出豆子 运行模拟并打印四列数字: 豆数 黑豆的数量 白豆数 最后一粒豆子的颜色 使用

从袋子里取出2颗豆子

如果:

  • 它们都是黑色的,将其中一个放回袋子并丢弃 另一个

  • 一个是黑色的,另一个是白色的。把白色的豆子放回袋子里 把黑豆扔掉

  • 两个都是白色的。丢弃两个,在袋子里放一个黑豆

最后一颗豆子是什么颜色的

您决定编写一个可以运行50次模拟的程序。 从一包10个bean开始,然后继续运行程序 将袋中的豆子数量增加一个,直到 测试了一袋60颗豆子。在袋子里装上任意颜色的巧克力 豆子和豆子从袋子里随机抽出豆子

运行模拟并打印四列数字:

  • 豆数
  • 黑豆的数量
  • 白豆数
  • 最后一粒豆子的颜色
  • 使用ArrayList类实现此程序。把豆子从盘子里拿出来 数组中的随机位置,并以不同的方式添加bean 随机位置

    以下是我迄今为止所做的工作: 但它一直在说arraylist不受约束。我知道问题在哪里,但不知道如何解决。如果我从行中删除+1

    index1 = rand.nextInt(bag.size() + 1)
    
    它会说是负界误差

    import java.io.*; 
    import java.util.*; 
    import java.util.Random;
    public class Counter
    {
        public static void main (String args[])
        {
            ArrayList<Integer> bag = new ArrayList<Integer>();
    
            Random rand = new Random();
    
            int color;
            int index1;
            int index2;
            int blackCount = 0;
            int whiteCount = 0;
            String last = "";
    
            System.out.println("Beans     Black     White     Last");
    
            for (int total = 10; total <= 60; total++)
            {
                for (int run = total; run > 0; run--)
                {
                    // 1 black and 2 white
                    color = rand.nextInt(2) + 1;
                    if (color == 1)
                    {
                        blackCount++;
                    }
                    else if (color == 2)
                    {
                        whiteCount++;
                    }
    
                    bag.add(rand.nextInt(bag.size() + 1), color);
                }
    
                System.out.print(total + "\t " + blackCount + "\t " + whiteCount + "\t ");     
    
                while (blackCount != 1 || whiteCount != 1)
                {
                    index1 = rand.nextInt(bag.size());
                    index2 = rand.nextInt(bag.size());
    
    
                    if (bag.get(index1) == 1 && bag.get(index2) == 1)
                    {
                        bag.remove(index2);
                        blackCount--;
                    }
                    else if (bag.get(index1) == 1 && bag.get(index2) == 2)
                    {
                        bag.remove(index1);
                        blackCount--;
                    }
                    else if (bag.get(index1) == 2 && bag.get(index2) == 1)
                    {
                        bag.remove(index2);
                        blackCount--;
                    }
                    else if (bag.get(index1) == 2 && bag.get(index2) == 2)
                    {
                        bag.remove(index1);
    
                        index2 = rand.nextInt(bag.size());
                        while (bag.get(index2) == 1)
                        {
                            if (bag.get(index2) == 1)
                            {
                                index2 = rand.nextInt(bag.size());
                            }
                        }
    
                        bag.remove(index2);
                        bag.add(rand.nextInt(bag.size() + 1), 1);
                        blackCount++;
                        whiteCount -= 2;
                    }
                }
    
                if (whiteCount == 1)
                {
                    last = "White";
                }
                else 
                {
                    last = "Black";
                }
    
                System.out.print(last + "\n");
    
                bag.clear();
                blackCount = 0;
                whiteCount = 0;
            }
        }
    }
    
    import java.io.*;
    导入java.util.*;
    导入java.util.Random;
    公共课柜台
    {
    公共静态void main(字符串参数[])
    {
    ArrayList包=新的ArrayList();
    Random rand=新的Random();
    内色;
    int index1;
    int index2;
    int blackCount=0;
    int-whiteCount=0;
    字符串last=“”;
    System.out.println(“豆黑白末”);
    对于(整数总计=10;总计0;运行--)
    {
    //1黑2白
    颜色=rand.nextInt(2)+1;
    如果(颜色==1)
    {
    黑计数++;
    }
    else if(颜色==2)
    {
    白计数++;
    }
    袋子添加(兰特nextInt(袋子大小()+1),颜色);
    }
    系统输出打印(总计+“\t”+黑计数+“\t”+白计数+“\t”);
    而(黑数!=1 | |白数!=1)
    {
    index1=随机数(袋大小());
    index2=rand.nextInt(bag.size());
    if(bag.get(index1)==1&&bag.get(index2)==1)
    {
    袋。移除(index2);
    黑数--;
    }
    如果(bag.get(index1)==1和&bag.get(index2)==2),则为else
    {
    袋。移除(index1);
    黑数--;
    }
    else如果(bag.get(index1)==2和&bag.get(index2)==1)
    {
    袋。移除(index2);
    黑数--;
    }
    else如果(bag.get(index1)==2&&bag.get(index2)==2)
    {
    袋。移除(index1);
    index2=rand.nextInt(bag.size());
    while(bag.get(index2)==1)
    {
    如果(行李获取(index2)=1)
    {
    index2=rand.nextInt(bag.size());
    }
    }
    袋。移除(index2);
    袋子添加(兰特nextInt(袋子大小()+1),1);
    黑计数++;
    白细胞计数-=2;
    }
    }
    如果(白计数=1)
    {
    last=“白色”;
    }
    其他的
    {
    last=“黑色”;
    }
    系统输出打印(最后一次+“\n”);
    包。清除();
    黑数=0;
    白细胞计数=0;
    }
    }
    }
    
    看到多人发布完全相同的作业总是很好。好的,首先请阅读.nextInt(max)上的javadocs。它返回的值介于0(包含)和最大值(独占)之间。因此,size+1将随机返回到数组末尾之外。@KevinO那么这是重复的:D@user8,但他们处理作业的方式不同。我很欣赏帮助人们学习的尝试,但是现在很多stackoverflow.com似乎是一个家庭作业解决方案网站,人们可以通过谷歌将答案粘贴到他们的工作中。@KevinO,但这是他们的问题-当ArrayList的大小为0时,他们不能从中随机选择一个值。因此,他们需要在随机调用中添加1,使其覆盖正确大小的范围,然后从传递给add的参数中减去1,这样它将插入正确的位置。@EdwardPeters,我不理解您的评论,抱歉。如果包(ArrayList)为空,则没有可供选择的内容,因此添加+1没有帮助:数组为空。我认为更大的问题是不使用基于零的系统。请注意,使用black=1和white=2,而不是0和1(或者更好的是使用枚举)。