Java 我制作了一个程序,在循环中随机生成0和1。如何使循环在程序连续生成10个0时停止?

Java 我制作了一个程序,在循环中随机生成0和1。如何使循环在程序连续生成10个0时停止?,java,string,math,loops,random,Java,String,Math,Loops,Random,这是我到目前为止的cod: public class Laboratoire05E { public static void main(String[] args) { int number = 0; int counter = 0; do { bin = (int) (Math.random()*2); System.out.print(bin); counter++; if(counter>

这是我到目前为止的cod:

public class Laboratoire05E {
public static void main(String[] args) {

    int number = 0;
    int counter = 0;

     do {
        bin = (int) (Math.random()*2);
        System.out.print(bin);
        counter++;

        if(counter>=80) {
            System.out.print("\n");
            counter = counter-80;
            }
        } while (bin < 2);
}
public class laboratoroire05e{
公共静态void main(字符串[]args){
整数=0;
int计数器=0;
做{
bin=(int)(Math.random()*2);
系统输出打印(bin);
计数器++;
如果(计数器>=80){
系统输出打印(“\n”);
计数器=计数器-80;
}
}而(bin<2);
}
}

控制台的输出如下:

01000111000011101011010011000000110010011010010110110110101001110111111110110111 00101100001001100010001100101001101110011000110110111010100010011111000101110011 00000010111101011110100100100100000101001111000110001101010011000001110100000011 10100001001011100110100110010011100110001110100111111110111101111000010100001110 11011001110001101111110111010111111110100110100000100001011100011100011001000101 01001111111011001101000010111010111010111100001101010001100001101011111010001111 0011001010110000101001111111


这将无限期地继续下去

请记住,您的循环可能会在一行中找到10'0
(.5^10)=0.0977%
。如果您增加该金额,您可能需要在
计数器
超过生成的数字的某个阈值时进行额外检查

int zeroCount = 0
do {
    bin = (int) (Math.random()*2);
    System.out.print(bin);
    counter++;

    // Check for 10 in row:
    if(bin == 0) {
        zeroCount ++;
    } else {
        zeroCount = 0;
    }
    if(zeroCount == 10) {
        break;  // Exit loop
    }

    if(counter>=80) {
        System.out.print("\n");
        counter = counter-80;
        }
} while (bin < 2);
int zeroCount=0
做{
bin=(int)(Math.random()*2);
系统输出打印(bin);
计数器++;
//检查第10行:
如果(bin==0){
零计数++;
}否则{
零计数=0;
}
如果(零计数==10){
break;//退出循环
}
如果(计数器>=80){
系统输出打印(“\n”);
计数器=计数器-80;
}
}而(bin<2);
  • 在循环外将计数器变量初始化为零
  • 如果随机结果为0,则增加计数器,否则将计数器重置为0
  • 如果计数器==10,则中断

  • 创建一个
    随机
    会稍微有效率一些

    Random rand = new Random();
    for (int i = 1; i <= 10; i++) {
        int bin = rand.nextInt(2);
        System.out.print(bin);
        if (bin == 1) i = 0;
    }
    
    Random rand=new Random();
    
    对于(inti=1;i而言,按位求解是有趣的

    int mask = 0x3FF; // masks last 10 bits
    int buffer = mask; // initialize buffer to all ones
    
    while ((mask & buffer) != 0) {
        int digit = (int) (Math.random() * 2);
        buffer = (buffer << 1) | digit;
    }
    
    int mask=0x3FF;//屏蔽最后10位
    int buffer=mask;//将缓冲区初始化为所有缓冲区
    而((掩码和缓冲区)!=0){
    整数位数=(整数)(Math.random()*2);
    
    缓冲区=(缓冲区?你认为哪种方法有效?非常感谢,这非常有用。我还认为连续10个0需要很长时间,我只是以10为例。再次感谢!事实上,找到10个0并不需要那么长时间——大约2^10或1024次尝试。@DStanley实际上我的数学是正确的;如果你解
    x*0.000977=1
    ,你就会得到
    1024
    尝试。我只是高估了这是一个“长”循环。@NominSim-我没有反驳你的数学,但这不是一个“长时间”。1000个简单循环将在几毫秒内运行。这就是我得到的。;)十个零通常需要2^^10或1024位。@ahenderson您是对的,输出可能是最昂贵的部分。是否需要缓冲区还不清楚。只是吹毛求疵,数学期望是1024+10=1034位:)@MarkoTopolnik我认为这不对,
    1/(0.5^10)
    =1024digits@NominSim在一开始,在生成任何数字之前,有1/1024的可能性,接下来的10个数字都将为零。从那以后进行归纳。