gpt4 book ai didi

java - 不同的打印方法为相同的变量返回不同的值?

转载 作者:行者123 更新时间:2023-12-01 19:44:21 25 4
gpt4 key购买 nike

我编写了一个简单的程序来模拟掷骰子游戏,一切似乎都运行良好,除了我注意到我的“记分板”会根据我用来打印它的方法返回不同的值。

使用 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

最佳答案

Java 中的字符串是不可变的。一旦创建了字符串,其值就永远无法更改。

因此,您将在此处创建 status 字符串,其值为 winsloss

status = String.format("printing through variable - wins : %d | loss : %d \n", 
wins, loss );

然后更改 wins 值。现在,您不能期望 status 字符串 value 反射(reflect) winsloss 的当前值。

您必须使用最新值创建一个新字符串。

关于java - 不同的打印方法为相同的变量返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54033219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com