我正在制作一个简单的投币游戏,我写了几种方法来调用并使我的主要课程简短。游戏播放一次后,要求用户输入的第一个If / Else语句跳转到Else语句而不提示输入。
package cointoss;
import java.util.Random;
import java.util.Scanner;
public class Game {
int money;
int result;
int bet;
Random rn = new Random();
Scanner in = new Scanner(System.in);
String playerPick;
String aResult;
public void setMoney(int a)
{
money = a;
}
public int getMoney()
{
return money;
}
public void getBet()
{
System.out.println("How much would you like to bet?");
bet = in.nextInt();
do{
if(bet > money)
{
System.out.println("You cannot bet more than you have!");
System.out.println("You have bet " + (bet - money) + " too many coins.");
continue;
}
else
System.out.println("You have bet " + bet + " coins.");
}
while(bet > money);
}
public void getInput()
{
System.out.println("Pick Heads or Tails");
playerPick = in.nextLine();
playerPick.toLowerCase();
if(playerPick.contains("heads"))
playerPick ="heads";
else if(playerPick.contains("tails"))
playerPick ="tails";
else
System.out.println("Invalid Selection");
}
public void flipCoin()
{
result = rn.nextInt(2);
if(result == 0)
{
aResult = "heads";
}
else
aResult = "tails";
}
public void checkResult()
{
if(playerPick.equals(aResult))
{
System.out.println("You have won!");
money += bet;
System.out.println("You now have " + money + " coins");
}
else{
System.out.println("You have lost!");
money -= bet;
System.out.println("You now have " + money + " coins");
}
}
}
My Tester Class:
package cointoss;
public class GameTest {
public static void main(String[] args)
{
Game coinToss = new Game();
coinToss.setMoney(100);
while(coinToss.getMoney() > 0)
{
coinToss.getInput();
coinToss.getBet();
coinToss.flipCoin();
coinToss.checkResult();
}
}
}
答案 0 :(得分:7)
The method toLowerCase()
不会更改字符串的内容; String
是Java中的不可变类。 toLowerCase()
方法返回结果。你需要改变
playerPick.toLowerCase();
到
playerPick = playerPick.toLowerCase();
答案 1 :(得分:1)
您的问题是,每次运行测试程序循环时,您都不会将“in”重新初始化为新的扫描程序。单个扫描器读取一行输入并接受完整答案,但不承认可以进一步输入。
答案 2 :(得分:1)
问题是,当用户输入一行时,输入缓冲区将包含字符,然后是"换行符" (行尾)字符。当您使用nextInt
时,Scanner
会查找并跳过整数。但它不会跳过终点。因此,当您下次在nextLine
中调用getInput()
时,它会找到上一行左边的内容,即空字符串,然后返回。你需要做的一些事情:
(1)在getBet
中,在方法的末尾添加in.nextLine()
,跳过结束行。 nextLine
将返回一个字符串,但您可以忽略它。另请参阅Scanner issue when using nextLine after nextXXX
(2)getInput
需要有一个循环,以便在用户输入无效输入时,您返回并要求他输入有效字符串。否则,它会显示"Invalid Selection"
但请求下注,这不是你想要的。
(3)参见关于toLowerCase
的其他答案。
答案 3 :(得分:0)
使用时
playerPick.toLowerCase();
它没有任何效果,因为该值未被分配到任何内容。 要更改对象的值,您必须为其指定值,如下所示:
playerPick = Pick.toLowerCase();
这会分配值,而不是调用空方法
希望这会有所帮助:)