我写了一个简单的程序来模拟胡扯游戏,除了我注意到我的“记分板”将根据我用来打印它的方法返回不同的值外,其他一切似乎都运行良好。
使用print语句打印“ wins”变量将返回正确的结果 但是通过另一个格式化的字符串“ status”打印“ wins”变量将返回较低的值。我知道我在这里错过了一些东西,因为我已经很长时间没有编程了,但是我对如何实现这一点感到很困惑。任何反馈都将不胜感激。
public class RandomSumGame {
public static void main(String[] args) {
// TODO Auto-generated method stub\
RandomSumGame test = new RandomSumGame();
test.play();
}
boolean start;
int d1;
int d2;
int sum;
int valuePoint;
int wins;
int loss;
String status;
public void play(int d1, int d2)
{
status= String.format("printing through variable - wins : %d | loss : %d \n", wins, loss );
if (sum == 11 || sum == 7)
{
System.out.println("Natural - You Win!");
wins = wins + 1;
}
else if (sum == 2 || sum == 3 || sum == 12) {
System.out.println("Craps! - You lose!");
loss = loss + 1;
}
else {
valuePoint = sum;
System.out.printf("You set the value point of %d = %d + %d \n", valuePoint, d1, d2);
while (true) {
rollDice();
if (sum == valuePoint) {
System.out.println("YOU WIN!");
wins = wins + 1;
break;
}
else if (sum == 7) {
System.out.println("YOU LOSE!");
loss = loss + 1;
break;
}
else {
System.out.println("ROLLING DICE AGAIN!");
continue;
}
}
}
System.out.printf("Straight up printing - wins : %d | loss : %d \n", wins, loss );
System.out.println(status);
}
public void play() {
int round = 1;
start = true;
while (start == true){
System.out.println("Round : " + round);
round +=1;
rollDice();
play(d1, d2);
//System.out.println(status);
if (round >3) {
start = false;
}
}
}
public void rollDice() {
d1 = (int) (Math.random() * 6 + 1);
d2 = (int) (Math.random() * 6 + 1);
sum = d1 + d2;
System.out.printf("YOU ROLL THE DICE! - sum is: %d , Dice 1: %d , Dice 2: %d\n", sum, d1, d2);
}
}
这是控制台中的示例输出,您可以看到它们返回不同的结果。
圆形:1
您滚动骰子! -总和为:7,骰子1:3,骰子2:4
自然-您赢了!
直接打印-胜:1 |损耗:0
通过变量打印-胜数:0 |损耗:0
回合:2
您滚动骰子! -总和为:11,骰子1:5,骰子2:6
自然-您赢了!
直接打印-胜:2 |损耗:0
通过变量打印-胜:1 |损耗:0
圆形:3
您滚动骰子! -总和为:10,骰子1:4,骰子2:6
您将值点设置为10 = 4 + 6
您滚动骰子! -总和为:6,骰子1:1,骰子2:5
再次掷骰子!
您滚动骰子! -总和为:8,骰子1:6,骰子2:2
再次掷骰子!
您滚动骰子! -总和为:4,骰子1:2,骰子2:2
再次掷骰子!
您滚动骰子! -总和为:10,骰子1:6,骰子2:4
您赢了!
直接打印-胜:3 |损耗:0
通过变量打印-胜:2 |损耗:0
答案 0 :(得分:3)
字符串在Java中是不可变的。创建字符串后,该值将永远无法更改。
因此,您在这里创建的status
字符串具有值wins
和loss
。
status = String.format("printing through variable - wins : %d | loss : %d \n",
wins, loss );
然后,您更改wins
的值。现在,您不能指望status
字符串 value 能够反映出wins
或loss
的当前值。
您必须使用最新值创建一个新字符串。
答案 1 :(得分:0)
在打印之前,只需将此行移至函数的末尾即可。
status= String.format("printing through variable - wins : %d | loss : %d \n", wins, loss );
您正在使用具有win,loss预处理值的值创建字符串。
答案 2 :(得分:0)