Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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_Coin Flipping - Fatal编程技术网

Java 如何投掷硬币并显示正面和反面计数?

Java 如何投掷硬币并显示正面和反面计数?,java,random,coin-flipping,Java,Random,Coin Flipping,我是Java的初学者,仍然对Java充满热情。 我得到了这样一个练习:“编写一个模拟程序,可以抛硬币:1000次,然后打印出你得到尾巴的次数和得到正面的次数” 这就是我到目前为止一直在努力做的事情 import java.util.Random; import java.util.regex.Pattern; public class coin { public static void main( String [] args ) { Random r =

我是Java的初学者,仍然对Java充满热情。 我得到了这样一个练习:“编写一个模拟程序,可以抛硬币:1000次,然后打印出你得到尾巴的次数和得到正面的次数” 这就是我到目前为止一直在努力做的事情

import java.util.Random; 
import java.util.regex.Pattern; 

public class coin { 

    public static void main( String [] args ) { 

        Random r = new Random(); 
        Pattern tail = Pattern.compile("Tail+"); 
        Pattern head = Pattern.compile("Head+"); 
        String flips = ""; 

        for (int i = 0; i < 1000; i++) { 
            flips += r.nextInt(100) % 2 == 0 ? "Head" : "Tail"; 
        } 
        String[] heads = head.split( flips ); 
        String[] tails = tail.split( flips ); 
        //Display
        System.out.println("Times head was flipped:" + heads.length); 
        System.out.println("Times tail was flipped:" + tails.length); 
    }
}
import java.util.Random;
导入java.util.regex.Pattern;
公营硬币{
公共静态void main(字符串[]args){
随机r=新随机();
Pattern tail=Pattern.compile(“tail+”);
Pattern head=Pattern.compile(“head+”);
字符串翻转=”;
对于(int i=0;i<1000;i++){
翻转+=r.nextInt(100)%2==0?“头”:“尾”;
} 
String[]heads=head.split(翻转);
String[]tails=tail.split(翻转);
//展示
System.out.println(“头部翻转的次数:“+heads.length”);
System.out.println(“尾部翻转的次数:“+tails.length”);
}
}
这个程序似乎在运行,但它总是给我一个几乎成对的头和尾,总数超过1000,至少是1或更多。 拜托,有人能解决这个问题吗?我错在哪里?
谢谢

不要将结果追加到字符串中,然后拆分字符串并计算“Head”/“Tail”的出现次数,您只需在单独的变量中跟踪计数即可:

int headCount = 0;
int tailCount = 0;

for (int i = 0; i < 1000; i++) {
    if(r.nextInt(100) %2 == 0)
    {
      headCount++;
    }
    else
    {
      tailCount ++;
    }

  System.out.println("Times head was flipped:" + headsCount); 
  System.out.println("Times tail was flipped:" + tailCount); 

}
int总人数=0;
int tailCount=0;
对于(int i=0;i<1000;i++){
如果(r.nextInt(100)%2==0)
{
编制++;
}
其他的
{
tailCount++;
}
System.out.println(“时间头被翻转:+人数”);
System.out.println(“尾部翻转的次数:“+tailCount”);
}

您可以在单独的变量中跟踪计数,而不是将结果追加到字符串中,然后拆分字符串并计算“Head”/“Tail”的出现次数:

int headCount = 0;
int tailCount = 0;

for (int i = 0; i < 1000; i++) {
    if(r.nextInt(100) %2 == 0)
    {
      headCount++;
    }
    else
    {
      tailCount ++;
    }

  System.out.println("Times head was flipped:" + headsCount); 
  System.out.println("Times tail was flipped:" + tailCount); 

}
int总人数=0;
int tailCount=0;
对于(int i=0;i<1000;i++){
如果(r.nextInt(100)%2==0)
{
编制++;
}
其他的
{
tailCount++;
}
System.out.println(“时间头被翻转:+人数”);
System.out.println(“尾部翻转的次数:“+tailCount”);
}

一枚硬币有两面,所以我真的不明白为什么你会要求随机生成器生成一个介于0和100之间的数字(不包括)。在0和2之间(互斥)将更符合逻辑

还有,你被要求数数。追加字符串然后拆分以获得最终值是一种非常复杂且效率低下的计数方法。您应该改为使用整数。每次从随机数中得到1时,递增一个计数器。最后,返回1的次数是多少,因此0的次数是1000——这个数字

    Random r = new Random(); 
    int heads = 0;
    for (int i = 0; i < 1000; i++) { 
        int side = random.nextInt(2);
        if (side == 1) {
            heads++;
        } 
    } 
    System.out.println("Times head was flipped:" + heads); 
    System.out.println("Times tail was flipped:" + (1000 - heads)); 
Random r=new Random();
int头=0;
对于(int i=0;i<1000;i++){
int-side=random.nextInt(2);
如果(边==1){
heads++;
} 
} 
System.out.println(“时间头被翻转:+头”);
println(“时代的尾巴被翻转:”+(1000个人头));
它甚至可以简化为以下内容(尽管这种简化使代码更难理解):

Random r=new Random();
int头=0;
对于(int i=0;i<1000;i++){
头数+=随机数。下一个(2);
} 
System.out.println(“时间头被翻转:+头”);
println(“时代的尾巴被翻转:”+(1000个人头));

一枚硬币有两面,所以我真的不明白为什么你会要求随机生成器生成一个介于0和100之间的数字(不包括)。在0和2之间(互斥)将更符合逻辑

还有,你被要求数数。追加字符串然后拆分以获得最终值是一种非常复杂且效率低下的计数方法。您应该改为使用整数。每次从随机数中得到1时,递增一个计数器。最后,返回1的次数是多少,因此0的次数是1000——这个数字

    Random r = new Random(); 
    int heads = 0;
    for (int i = 0; i < 1000; i++) { 
        int side = random.nextInt(2);
        if (side == 1) {
            heads++;
        } 
    } 
    System.out.println("Times head was flipped:" + heads); 
    System.out.println("Times tail was flipped:" + (1000 - heads)); 
Random r=new Random();
int头=0;
对于(int i=0;i<1000;i++){
int-side=random.nextInt(2);
如果(边==1){
heads++;
} 
} 
System.out.println(“时间头被翻转:+头”);
println(“时代的尾巴被翻转:”+(1000个人头));
它甚至可以简化为以下内容(尽管这种简化使代码更难理解):

Random r=new Random();
int头=0;
对于(int i=0;i<1000;i++){
头数+=随机数。下一个(2);
} 
System.out.println(“时间头被翻转:+头”);
println(“时代的尾巴被翻转:”+(1000个人头));