java掷硬币模拟器问题

java掷硬币模拟器问题,java,computer-science,Java,Computer Science,嗨,我正在为java做一个掷硬币模拟器,它必须以某种方式完成。它必须有一个用于sideup的字符串来保存由无参数构造函数生成的“正面”或“反面”字符串,toss方法必须无效,并且必须有一个getsideup方法,然后我们必须运行抛硬币20次,并显示正面和反面的数量。。。我可以用none-void方法简单地完成它,只返回结果,但是绕过这个void和getsideup让我抓狂。 这就是我目前所拥有的 import java.util.Random; public class coin { p

嗨,我正在为java做一个掷硬币模拟器,它必须以某种方式完成。它必须有一个用于sideup的字符串来保存由无参数构造函数生成的“正面”或“反面”字符串,toss方法必须无效,并且必须有一个getsideup方法,然后我们必须运行抛硬币20次,并显示正面和反面的数量。。。我可以用none-void方法简单地完成它,只返回结果,但是绕过这个void和getsideup让我抓狂。 这就是我目前所拥有的

import java.util.Random;
public class coin {
    public static String sideUp;

    public static void toss() {
        Random rand = new Random();
        int sideup = rand.nextInt(2);
        if (sideup == 0) {
            sideUp = "heads";
        } else {
            sideUp = "tails";
        }
    }

    public static String getsideup() {
        System.out.println(sideUp);
        return sideUp;
    }

    public static void main(String[] args) {
        // coin coin = new coin();
        int hcount = 0;
        int tcount = 0;
        for (int i = 1; i <= 20; i++) {
            if (getsideup().equals("heads")) {
                hcount++;
            } else {
                tcount++;
            }
        }
        System.out.println("total heads = " + hcount + " total tails = " + tcount);
    }
}
import java.util.Random;
公共级硬币{
公共静态字符串sideUp;
公共静态void toss(){
Random rand=新的Random();
int sideup=rand.nextInt(2);
如果(sideup==0){
sideUp=“头”;
}否则{
sideUp=“tails”;
}
}
公共静态字符串getsideup(){
系统输出打印项次(sideUp);
返回sideUp;
}
公共静态void main(字符串[]args){
//硬币=新硬币();
int hcount=0;
int t计数=0;
for(int i=1;i
for(int i=1;i在循环开始时没有调用toss()。这需要将值设置为sideUp,并需要放弃sideUp来更改每个toss。

import java.util.Random;
import java.util.Random;
public class coin
{
public static String sideUp;
public int hcount=0;
public int tcount=0;

public static void toss()
     {
        Random rand = new Random();
        int sideup = rand.nextInt(2);
        if (sideup == 0)
            {
                sideUp = "heads";
                hcount++;
            }
            else 
            {
                sideUp  = "tails";
                tcount++;
            } 
      }       

  public static void main(String[] args)
  {
    for(int i=0;i<20;i++)
    {toss();}
    System.out.println("total heads = " + hcount + " total tails = " + tcount);
   }
}
公共级硬币 { 公共静态字符串sideUp; 公共整数hcount=0; 公共int t帐户=0; 公共静态void toss() { Random rand=新的Random(); int sideup=rand.nextInt(2); 如果(sideup==0) { sideUp=“头”; hcount++; } 其他的 { sideUp=“tails”; t计数++; } } 公共静态void main(字符串[]args) {
for(int i=0;i简单的修复方法是在if语句之前放入for循环中,但我在这里看到了很多可以做的事情。首先,我将为Coin类添加一个构造函数,并将hcount和tcount添加到类变量中,并生成head和tails常量:

private String sideUp;
private int hcount;
private int tcount;
private static final String HEADS = "Heads";
private static final String Tails = "Tails";

Coin()
{
    this.sideUp = HEADS;
    this.hcount = 0;
    this.tcount = 0;
}
然后我会做一个方法来检查抛投:

public  void checkToss()
{
    if (getsideup().equals(HEADS)) 
        hcount++;
    else
        tcount++;
}
现在将toss()和checkCoin()方法添加到if语句之前的for循环中。它应该如下所示:

for (int i = 1; i <= 20; i++)
{
    coin.toss(); 
    coin.checkToss();
}
import java.util.Random;
public class Coin 
{
    private  String sideUp;
    private int hcount;
    private int tcount;
    private static final String HEADS = "Heads";
    private static final String TAILS = "Tails";

    Coin()
    {
        this.sideUp = HEADS;
        this.hcount = 0;
        this.tcount = 0;
    }

    public void toss()
    {
        Random rand = new Random();
        int sideup = rand.nextInt(2);
        if (sideup == 0) 
            sideUp = HEADS;
        else 
            sideUp = TAILS;    
    }

    public String getsideup()
    {
        System.out.println(sideUp);
        return sideUp;
    }

    public void checkToss()
    {
    if (getsideup().equals(HEADS)) 
        this.hcount++;
    else
        this.tcount++;
    }

    public int getHeadsCount()
    {
        return this.hcount;
    }

    public int getTailsCount()
    {
        return this.tcount;
    }

    public static void main(String[] args)
    {
        Coin coin = new Coin();
        for (int i = 1; i <= 20; i++) 
        {
            coin.toss();
            coin.checkToss();
        }
        System.out.println("Total Heads = " + coin.getHeadsCount() + " Total Tails = " + coin.getTailsCount());
    }
}
所有这些放在一起看起来都是这样的:

for (int i = 1; i <= 20; i++)
{
    coin.toss(); 
    coin.checkToss();
}
import java.util.Random;
public class Coin 
{
    private  String sideUp;
    private int hcount;
    private int tcount;
    private static final String HEADS = "Heads";
    private static final String TAILS = "Tails";

    Coin()
    {
        this.sideUp = HEADS;
        this.hcount = 0;
        this.tcount = 0;
    }

    public void toss()
    {
        Random rand = new Random();
        int sideup = rand.nextInt(2);
        if (sideup == 0) 
            sideUp = HEADS;
        else 
            sideUp = TAILS;    
    }

    public String getsideup()
    {
        System.out.println(sideUp);
        return sideUp;
    }

    public void checkToss()
    {
    if (getsideup().equals(HEADS)) 
        this.hcount++;
    else
        this.tcount++;
    }

    public int getHeadsCount()
    {
        return this.hcount;
    }

    public int getTailsCount()
    {
        return this.tcount;
    }

    public static void main(String[] args)
    {
        Coin coin = new Coin();
        for (int i = 1; i <= 20; i++) 
        {
            coin.toss();
            coin.checkToss();
        }
        System.out.println("Total Heads = " + coin.getHeadsCount() + " Total Tails = " + coin.getTailsCount());
    }
}
import java.util.Random;
公共级硬币
{
私有字符串sideUp;
私人国际帐户;
私人帐户;
私有静态最终字符串HEADS=“HEADS”;
私有静态最终字符串TAILS=“TAILS”;
硬币()
{
this.sideUp=头;
此.hcount=0;
this.tcount=0;
}
公众投票
{
Random rand=新的Random();
int sideup=rand.nextInt(2);
如果(sideup==0)
sideUp=头部;
其他的
sideUp=尾部;
}
公共字符串getsideup()
{
系统输出打印项次(sideUp);
返回sideUp;
}
公共无效校验码()
{
if(getsideup().equals(HEADS))
这个.hcount++;
其他的
这个.tcount++;
}
公共int getHeadsCount()
{
返回此.hcount;
}
public int gettailscont()
{
返回此.t帐户;
}
公共静态void main(字符串[]args)
{
硬币=新硬币();

对于(int i=1;我不应该在for cycle中调用
toss()
?除此之外,我看不出有什么问题。这是混合责任。我认为将toss添加到getter中会让人困惑。然后调用toss()来自for loop man的方法!我编辑了我的帖子…我只是想帮助你…没有任何意义的投票!当有人指出他们认为你的答案不太好时,也没有任何意义感到不安。当你在这里回答问题时,无论你有多好,都会经常发生这种情况。只要试着从中学习。这会让我更容易理解如果在toss方法中增加计数,而不是试图设置字符串,则在另一个方法中调用该方法并在那里增加它。那么,您还必须在toss方法中有一个setter,然后是setSide()。否则,您不能为getter设置要检索的值。调用toss()在for循环中,它现在正在运行。我相信这本书所要求的方式,谢谢大家的帮助。如果它有助于解决问题,请给出答案。