我正在尝试编写一种方法,可以反复翻转硬币,直到看到连续的三个头。每次翻转硬币时,都会显示所看到的内容(H表示头部,T表示尾部)。当连续3个头被翻转时,打印出祝贺消息。 例如,T T H H H H H. 连续三个头!
public static void threeHeads(){
Random rnd=new Random();
char c = (char) (rnd.nextInt(26) + 'a');
for(int i=1;i<=c.
}
我被困在for循环中。如何指定它循环的次数。即使我声明3个不同的char c,我怎么能将它转换为循环的次数。我在想我是否应该找到ascii表来找到哪个数字是H和T来专门打印这些2?或者循环是多余的?
public static void threeHeads(){
Random rnd=new Random();
char c = (char) (rnd.nextInt(26) + 'a');
if(c=='H' && c=='H' && c=='H'){
System.out.println("Three heads in a row!");
}
}
另一个问题是==和equals的赋值。
对于布尔值,我使用==
我理解,对于字符串,我应该使用相同的。然后对于char字符,我应该使用什么?
eg.char == 'Y'
我是对的吗?
答案 0 :(得分:3)
我认为这是一个家庭作业。
不使用Random.nextInt
,而是使用Random.nextBoolean
说 TAIL 是false
而 HEAD 是true
然后你需要连续的HEADS计数器,当新的 HEAD 被启用时会增加,当 TAIL 被翻转时会重置为0
。
一旦该计数器的值为3
,您的循环就会退出。
答案 1 :(得分:2)
在你的循环中放置一个计数器cnt
,当它是T(0)时将设置为0,如果它是H(1)则设置为cnt++
。如果cnt > 2
(类似于if(cnt>2) break;
)
不要忘记每次循环时都需要重新生成随机数。在您当前的代码中,它只执行一次。
我认为这些想法应该足以编写代码。
答案 2 :(得分:1)
一般来说,每当你发现自己问“我如何跟踪XXX”时,答案是声明一个新变量。但是,在您的情况下,您可以使用循环计数器i
:
以下是我将如何处理此问题:
public static void threeHeads()
{
Random rnd=new Random();
char c; //no need to initialize the char
//ostensibly, we will loop 3 times
for(int i=0; i < 3; i ++)
{
c = rnd.nextBoolean() ? 'h' : 't'; /*get random char*/;
if (c != 'h')
{
//but if we encounter a tails, reset the loop counter to -1
//that way it will be 0 next time the loop executes
i = -1;
}
System.out.println(c);
}
}
通过这种方式,它会继续尝试循环三次,直到c
每次'h'
为止。
回答有关==
与equals()
的问题:
你总是可以在原始类型(int,char,double,任何不是对象的东西)上使用==
。对于对象(字符串,Double-with-a-capital D',Lists),最好使用equals
。这是因为==
将测试对象是否完全相同的对象 - 只有当它们占据内存中的相同位置时才会出现。十分之九,你实际上有兴趣检查对象是否等同并且你不关心它们是否真的是同一个对象。但是,如果您遇到想要使用==
的情况,了解其详细信息仍然是一个好主意。
答案 3 :(得分:0)
int head =0;
int tail =1;
public static void threeHeads(){
Random rnd=new Random();
int headsSeen = 0;
while(headsSeen < 3){
int res = rnd.nextInt(1); //returns 1 or 0
if (res == head){
headsSeen ++;
}else{
headsSeen = 0; //there was a tail so reset counter
}
}
///At this point three heads seen in a row
}