Java 我制作了一个程序,在循环中随机生成0和1。如何使循环在程序连续生成10个0时停止?
这是我到目前为止的cod: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>
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);
创建一个
随机
会稍微有效率一些
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个数字都将为零。从那以后进行归纳。