正面或反面的博弈循环问题 import java.util.Scanner; 导入javax.swing.JOptionPane; 公共级硬币{ 公共静态void main(字符串[]args) { 布尔值validFinalInput=false; 布尔值validBetInput=false; 布尔值validGuessInput=false;//确定猜测是否为有效输入 布尔值validBet=false;//确定下注是否有效 布尔增益=真; double num;//未解析的边限定符 双倍余额=100; 字符串Bet=null;//Bet输入 双下注=0;//已解析的下注 字符串Guess=null;//H或T String Side=null;//确定Side 字符串GoAgain=null;//是/否重试输入 扫描仪输入=新扫描仪(系统输入); while(goAgain==true){//while true,球员将继续比赛。 num=Math.round(Math.random());//声明数字 如果(num==1){ Side=“H”; }else if(num==0){ Side=“T”; } 而(validGuessInput==false){//确定输入是否有效 System.out.println(“猜测:(H/T)”); 猜测=in.next(); 如果(猜测等于(“H”)|猜测等于(“T”)){ validGuessInput=true; }否则{ showMessageDialog(null,“无效猜测!”); validGuessInput=false; } } while(validBet==false){ while(validBetInput==false){ 试一试{ System.out.println(“打赌”(您的余额为“$”+余额); Bet=in.next(); 下注=Double.parseDouble(下注); 如果(下注>0){ validBetInput=true; } }捕获(数字格式){ showMessageDialog(null,“无效赌注!”); } } 如果(下注=0){ validBet=true; }否则{ showMessageDialog(null,“无效赌注!”); validBet=false; } } 如果(猜测等于(边)){ 余额=余额+(下注*2); System.out.println(“正确!侧面是:”+侧面); System.out.println(“您现在的余额为:$”+余额); }否则{ 余额=余额-赌注; System.out.println(“不正确!侧面是:”+侧面); System.out.println(“您现在的余额为:$”+余额); } 如果(余额==0){ System.out.println(“钱用完了,游戏结束了”); 打破 } System.out.println(“再次执行(Y/N)”); GoAgain=in.next(); while(validFinalInput==false); System.out.println(“再次执行(Y/N)”); GoAgain=in.next(); validGuessInput=false; validBet=false; validBetInput=false; if(GoAgain.equals(“Y”)){ goAgain=true; validFinalInput=true; }else if(GoAgain.equals(“N”)){ goAgain=false; validFinalInput=true; System.out.println(“感谢您的参与!您以:$”+余额结束); }否则{ System.out.println(“无效输入!”); } } } }
因此,我为一款“正面或反面”风格的游戏编写了这段代码。它最初是有效的,但后来我决定添加一些功能,结果失败了。基本上,它到了结尾,但仍然停留在最后一个输入(Y/N)上 有人能告诉我我做错了什么吗 很抱歉没有评论 我也知道我的变量不太符合约定,所以也很抱歉正面或反面的博弈循环问题 import java.util.Scanner; 导入javax.swing.JOptionPane; 公共级硬币{ 公共静态void main(字符串[]args) { 布尔值validFinalInput=false; 布尔值validBetInput=false; 布尔值validGuessInput=false;//确定猜测是否为有效输入 布尔值validBet=false;//确定下注是否有效 布尔增益=真; double num;//未解析的边限定符 双倍余额=100; 字符串Bet=null;//Bet输入 双下注=0;//已解析的下注 字符串Guess=null;//H或T String Side=null;//确定Side 字符串GoAgain=null;//是/否重试输入 扫描仪输入=新扫描仪(系统输入); while(goAgain==true){//while true,球员将继续比赛。 num=Math.round(Math.random());//声明数字 如果(num==1){ Side=“H”; }else if(num==0){ Side=“T”; } 而(validGuessInput==false){//确定输入是否有效 System.out.println(“猜测:(H/T)”); 猜测=in.next(); 如果(猜测等于(“H”)|猜测等于(“T”)){ validGuessInput=true; }否则{ showMessageDialog(null,“无效猜测!”); validGuessInput=false; } } while(validBet==false){ while(validBetInput==false){ 试一试{ System.out.println(“打赌”(您的余额为“$”+余额); Bet=in.next(); 下注=Double.parseDouble(下注); 如果(下注>0){ validBetInput=true; } }捕获(数字格式){ showMessageDialog(null,“无效赌注!”); } } 如果(下注=0){ validBet=true; }否则{ showMessageDialog(null,“无效赌注!”); validBet=false; } } 如果(猜测等于(边)){ 余额=余额+(下注*2); System.out.println(“正确!侧面是:”+侧面); System.out.println(“您现在的余额为:$”+余额); }否则{ 余额=余额-赌注; System.out.println(“不正确!侧面是:”+侧面); System.out.println(“您现在的余额为:$”+余额); } 如果(余额==0){ System.out.println(“钱用完了,游戏结束了”); 打破 } System.out.println(“再次执行(Y/N)”); GoAgain=in.next(); while(validFinalInput==false); System.out.println(“再次执行(Y/N)”); GoAgain=in.next(); validGuessInput=false; validBet=false; validBetInput=false; if(GoAgain.equals(“Y”)){ goAgain=true; validFinalInput=true; }else if(GoAgain.equals(“N”)){ goAgain=false; validFinalInput=true; System.out.println(“感谢您的参与!您以:$”+余额结束); }否则{ System.out.println(“无效输入!”); } } } },java,Java,因此,我为一款“正面或反面”风格的游戏编写了这段代码。它最初是有效的,但后来我决定添加一些功能,结果失败了。基本上,它到了结尾,但仍然停留在最后一个输入(Y/N)上 有人能告诉我我做错了什么吗 很抱歉没有评论 我也知道我的变量不太符合约定,所以也很抱歉 谢谢。在以while(goAgain==true){开头的循环中,goAgain的值永远不会改变,因为它在while(validBet==false){之前以结尾。结束括号放错了。在以while(goAgain==true)开头的循环中,goAg
谢谢。在以
while(goAgain==true){
开头的循环中,goAgain的值永远不会改变,因为它在while(validBet==false){
之前以结尾。结束括号放错了。在以while(goAgain==true)开头的循环中,goAgain的值永远不会改变{
,因为它以}
结尾,正好在之前,而(validBet==false){
。结束括号放错了位置
删除此处的分号
while(validFinalInput==false)
;
正确缩进代码
在此处检查您的逻辑;您正在为两个条件(true和false)设置validFinalInput=true
if(GoAgain.equals(“Y”)){
.........
validFinalInput=true;}
else if(GoAgain.equals(“N”)){
.......
validFinalInput=true;}
删除此处的分号
while(validFinalInput==false)
;
正确缩进代码
在此处检查您的逻辑;您正在为两个条件(true和false)设置validFinalInput=true
if(GoAgain.equals(“Y”)){
.........
validFinalInput=true;}
else if(GoAgain.equals(“N”)){
.......
validFinalInput=true;}
你有这个while语句
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Coin {
public static void main(String[] args)
{
boolean validFinalInput = false;
boolean validBetInput = false;
boolean validGuessInput = false; //Determines if the guess is a valid input
boolean validBet = false; //Determines if the bet is valid
boolean goAgain = true;
double num; //Unparsed Side Determiner
double balance = 100;
String Bet = null; //Bet Input
double bet = 0; //Parsed Bet
String Guess = null; //H or T
String Side = null; //Determines Side
String GoAgain = null; //Y/N Retry input
Scanner in = new Scanner(System.in);
while (goAgain == true){ //While true, the player will keep playing.
num = Math.round(Math.random()); //Declares Number
if (num == 1){
Side = "H";
} else if (num == 0){
Side = "T";
}
while (validGuessInput == false){ //Determines if the input is valid
System.out.println("Guess: (H/T)");
Guess = in.next();
if (Guess.equals("H") || Guess.equals("T")){
validGuessInput = true;
} else {
JOptionPane.showMessageDialog(null, "Invalid Guess!");
validGuessInput = false;
}
}
while (validBet == false){
while (validBetInput == false){
try {
System.out.println("Bet? (Your balance is $" + balance);
Bet = in.next();
bet = Double.parseDouble(Bet);
if (bet > 0){
validBetInput = true;
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Invalid Bet!");
}
}
if (bet <= balance && bet >= 0){
validBet = true;
} else {
JOptionPane.showMessageDialog(null, "Invalid Bet!");
validBet = false;
}
}
if (Guess.equals(Side)){
balance = balance + (bet * 2);
System.out.println("Correct! The side was: " + Side);
System.out.println("Your balance is now: $" + balance);
} else {
balance = balance - bet;
System.out.println("Incorrect! The side was: " + Side);
System.out.println("Your balance is now: $" + balance);
}
if (balance == 0){
System.out.println("You ran out of money. Ending Game.");
break;
}
System.out.println("Go again? (Y/N)");
GoAgain = in.next();
while (validFinalInput == false);
System.out.println("Go again? (Y/N)");
GoAgain = in.next();
validGuessInput = false;
validBet = false;
validBetInput = false;
if (GoAgain.equals("Y")){
goAgain = true;
validFinalInput = true;
} else if (GoAgain.equals("N")){
goAgain = false;
validFinalInput = true;
System.out.println("Thanks for playing! You ended with: $" + balance);
} else {
System.out.println("Invalid Input!");
}
}
}
}
这是一个无限循环!由于分号的原因,它将永远无法通过这部分代码。如果像这样重写它,它应该可以工作:
while (validFinalInput == false);
你有这个while语句
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Coin {
public static void main(String[] args)
{
boolean validFinalInput = false;
boolean validBetInput = false;
boolean validGuessInput = false; //Determines if the guess is a valid input
boolean validBet = false; //Determines if the bet is valid
boolean goAgain = true;
double num; //Unparsed Side Determiner
double balance = 100;
String Bet = null; //Bet Input
double bet = 0; //Parsed Bet
String Guess = null; //H or T
String Side = null; //Determines Side
String GoAgain = null; //Y/N Retry input
Scanner in = new Scanner(System.in);
while (goAgain == true){ //While true, the player will keep playing.
num = Math.round(Math.random()); //Declares Number
if (num == 1){
Side = "H";
} else if (num == 0){
Side = "T";
}
while (validGuessInput == false){ //Determines if the input is valid
System.out.println("Guess: (H/T)");
Guess = in.next();
if (Guess.equals("H") || Guess.equals("T")){
validGuessInput = true;
} else {
JOptionPane.showMessageDialog(null, "Invalid Guess!");
validGuessInput = false;
}
}
while (validBet == false){
while (validBetInput == false){
try {
System.out.println("Bet? (Your balance is $" + balance);
Bet = in.next();
bet = Double.parseDouble(Bet);
if (bet > 0){
validBetInput = true;
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Invalid Bet!");
}
}
if (bet <= balance && bet >= 0){
validBet = true;
} else {
JOptionPane.showMessageDialog(null, "Invalid Bet!");
validBet = false;
}
}
if (Guess.equals(Side)){
balance = balance + (bet * 2);
System.out.println("Correct! The side was: " + Side);
System.out.println("Your balance is now: $" + balance);
} else {
balance = balance - bet;
System.out.println("Incorrect! The side was: " + Side);
System.out.println("Your balance is now: $" + balance);
}
if (balance == 0){
System.out.println("You ran out of money. Ending Game.");
break;
}
System.out.println("Go again? (Y/N)");
GoAgain = in.next();
while (validFinalInput == false);
System.out.println("Go again? (Y/N)");
GoAgain = in.next();
validGuessInput = false;
validBet = false;
validBetInput = false;
if (GoAgain.equals("Y")){
goAgain = true;
validFinalInput = true;
} else if (GoAgain.equals("N")){
goAgain = false;
validFinalInput = true;
System.out.println("Thanks for playing! You ended with: $" + balance);
} else {
System.out.println("Invalid Input!");
}
}
}
}
这是一个无限循环!由于分号的原因,它将永远无法通过这部分代码。如果像这样重写它,它应该可以工作:
while (validFinalInput == false);
您粘贴了太多的代码。请将其解析为仅与实际问题相关的代码。此外,存在命名约定也是有原因的。名为goAgain
的布尔值和名为goAgain
的字符串会使您的代码非常混乱。我也知道我的变量不太符合约定,对此表示抱歉那你为什么不先修一下再问呢