Java 学校辅导请指教

Java 学校辅导请指教,java,string,boolean,Java,String,Boolean,我的一个学校教程要求我们创建一个投币应用程序。 问题的开头我已经弄糊涂了 它说: 硬币有一个实例变量,指示结果是正面还是反面。这个实例变量应该是什么类型 所以它应该是布尔值,对吗?但这怎么可能呢? 下一位是: 硬币的构造器应该将硬币的正面初始化为正面。构造函数没有参数 硬币有两种方法: •返回投掷结果的方法(即返回指示正面或反面的实例变量)。 •抛硬币的方法 下一步将是: 抛硬币的方法需要一个随机数,0或1 我们可以用数学课上的方法得到一个随机数。random()返回一个介于0和1之间的双精度值

我的一个学校教程要求我们创建一个投币应用程序。 问题的开头我已经弄糊涂了

它说:

硬币有一个实例变量,指示结果是正面还是反面。这个实例变量应该是什么类型

所以它应该是布尔值,对吗?但这怎么可能呢?

下一位是:

硬币的构造器应该将硬币的正面初始化为正面。构造函数没有参数

硬币有两种方法:

•返回投掷结果的方法(即返回指示正面或反面的实例变量)。 •抛硬币的方法

下一步将是:

抛硬币的方法需要一个随机数,0或1

我们可以用数学课上的方法得到一个随机数。random()返回一个介于0和1之间的双精度值。要将此值转换为整数(0或1),请使用以下代码


int num=(int)(Math.random()*2)//返回一个整数

布尔值是正确的形式

请记住,作为一名程序员,您正在创建真实世界的表示,以尝试高效、准确地解决问题

您可以将其设置为字符串“head”和“tails”,但这将需要大量的资源,您只想知道它是否是两种状态之一

这个特别的例子可能看起来微不足道,但如果你有一百万或十亿硬币要跟踪呢


哦,顺便说一下,一定要记录下哪一个是正面还是反面。通常,“头”是真的

好吧,如果你已经深入学习了,那么你可以在这里应用
enum

作为,
enum cointost{heads,tails}

如果您没有研究过这么多,您可以简单地将
boolean
赋值给它

比如,
boolean heads=true

boolean-tails=false

我认为在这种情况下最好的方法是将硬币的一面朝上作为一个实例变量,然后使用常量来按名称引用它们。例如:

public class Coin {
    public boolean side;
    public static final boolean HEADS = true;
    public static final boolean TAILS = false;
}
像这样,您可以通过检查
quarter.side==Coin.heads
来检查名为quarter的硬币是否为正面。虽然这不是最好的性能(您正在检查某个值是否等于true),但它使代码更具可读性,这在您开始编写时尤为重要。 此外,对于类似这样但有两个以上选项的对象,您可能希望查看枚举。

//此枚举表示硬币的正面
//This enum represents the face of a coin
public enum CoinFace {
    HEADS,
    TAILS
}

public class Coin {

    //Default starting face for a coin
    private static CoinFace DEFAULT_FACE = CoinFace.TAILS;

    //The current face of the coin
    private CoinFace currentFace;

    public Coin() {
         currentFace = DEFAULT_FACE;
    }

    public void setFace(CoinFace face) {
         currentFace = face;
    }

    public CoinFace getFace() {
         return currentFace;
    }
}

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

          //We create the coin instance
          Coin coinToToss = new Coin();

          //We will toss the coin 10 times
          for(int i = 0; i < 10; i++) {
              System.out.println("Tossing coin...");
              coinToToss = tossCoin(coinToToss);
              System.out.println("Got " + coinToToss.getFace() + "!");
          }
     }

     private static Coin tossCoin(Coin coin) {

          //We will use the Random class for random results
          Random random = new Random();

          //We get a random enum value (coin face)
          int randomFace = random.nextInt(CoinFace.values().length);
          CoinFace tossedFace = CoinFace.values()[randomFace];

          coin.setFace(tossedFace);
          return coin;
     } 
}
公共枚举硬币面{ 头, 尾巴 } 公共级硬币{ //硬币的默认起始面 私有静态CoinFace DEFAULT_FACE=CoinFace.TAILS; //硬币的当前面目 私人铸币面; 公众硬币(){ currentFace=默认的\u面; } 公共无效集合面(硬币面){ 当前面=面; } 公共CoinFace getFace(){ 回流面; } } 公共班机{ 公共静态void main(字符串[]args){ //我们创建硬币实例 Coin cointoss=新硬币(); //我们将掷硬币10次 对于(int i=0;i<10;i++){ System.out.println(“抛硬币…”); coinToToss=tossCoin(coinToToss); System.out.println(“Got”+coinToToss.getFace()+“!”; } } 私人静态硬币tossCoin(硬币){ //我们将使用随机类获得随机结果 随机=新随机(); //我们得到一个随机枚举值(硬币面) int randomFace=random.nextInt(CoinFace.values().length); CoinFace-tousedface=CoinFace.values()[randomFace]; 硬币面(抛面); 归还硬币; } }
以下是一种设置此变量的简单(对我来说也是合乎逻辑的)方法。您的构造函数:

public bool isHeads;
Constructor()
{ isHeads=true;}
抛硬币功能:

void flipCoin()
{
 if((int)(Math.random() *2) ==1)
      isHeads = true;
 else
      isHeads = false;
}
返回结果函数:

bool getResult()
{ return isHeads;}

好。。一枚硬币只有两种可能性。。现在,让我们看看,哪种数据类型只有2个状态?它也可以是enum。我同意,enum会很好。但鉴于这是一个教程,我会首先使用布尔值,因为它要么是真的,要么是假的。我想按照惯例,头是真的,尾是假的。@如果你还没有翻转它,那就更糟糕了。当一个简单的布尔值工作得很好时,为什么我们要告诉一个开始,让事情变得过于复杂?真的。那么,真/假是硬币两面的表示吗?哪一个为真,哪一个为假?我会根据哪个值等于真来命名变量(例如,调用变量
heads
)。也就是说,你不是在跟踪哪一方上岸,而是在跟踪头部是否上岸(是真是假)。Gimby,这取决于你。这就是为什么编程如此有趣的原因,它是一种解决问题的创造性行为。正如我在评论中所说,大多数人会认为得到一个头部是真实的,但你可以把尾巴变成真实的。不管哪种方式,你都要把你选择的东西记录下来,这样未来的程序员就可以知道你做了什么。你真的认为他要的是代码吗???我没有在问题中找到它!他问
这怎么可能?
,通过播下一个工作代码,我展示了它实际上是如何可能的——这就是孩子们来完成家庭工作的地方;)哦,我们还没有达到枚举的阶段,哈哈,但我也会去研究一下,谢谢你的信息兄弟。我怎么像你说的那样给它分配布尔值呢?你可以做
boolean toss=heads
布尔投掷=尾部用于您的输出,如我在答案中所示!