如果我有时运行这些程序,它会在打印“玩家赢”或“玩家输”后继续运行,我可以找到原因。。
import java.security.SecureRandom;
public class craps {
//create secure randowm number generator for use in method rolldice
private static final SecureRandom RANDOMNUMBERS = new SecureRandom();
// enum type with constants that represnet the game status
private enum Status {
CONTINUE, WON, LOST
}
// constanst that represent common rolls of the dice
private static final int SNAKE_EYES = 2;
private static final int TREY = 3;
private static final int SEVEN = 7;
private static final int YO_LEVEN = 11;
private static final int BOS_CARS = 12;
public static void main(String[] args) {
int myPoint = 0;
Status gameStatus;
int sumOfDice = rollDice();
switch (sumOfDice) {
case SEVEN:
case YO_LEVEN:
gameStatus = Status.WON;
break;
case SNAKE_EYES:
case TREY:
case BOS_CARS:
gameStatus = Status.LOST;
break;
default:
gameStatus = Status.CONTINUE;
myPoint = sumOfDice;
System.err.printf("Point is %d\n", myPoint);
break;
}
while (gameStatus == Status.CONTINUE){
sumOfDice = rollDice();
if(sumOfDice == myPoint)
gameStatus = Status.WON;
else
if (sumOfDice == SEVEN)
gameStatus = Status.LOST;
}
if (gameStatus == Status.WON)
System.err.println("Player Win ");
else
System.err.println("Player Loses ");
}
public static int rollDice() {
int dice1 = 1 + RANDOMNUMBERS.nextInt(6);
int dice2 = 1 + RANDOMNUMBERS.nextInt(6);
int sum = dice1 + dice2; // sum of die values
//display results of this roll
System.out.printf("Player roller %d + %d = %d\n", dice1, dice2, sum);
return sum;
}
}
这里的输出:
球员滚轴3 2=5
分数是5
玩家滚轮6 4=10
游戏者滚轴6=12
玩家滚轮5 5=10
球员滚轴12=3
球员滚轴1 3=4
球员获胜
球员滚轴4 6=10
球员滚轴4 1=5
构建成功(总时间:0秒)
从提供的输出可以看出,你的应用程序基本上运行良好;它不是“滚得太频繁”:它滚得和它应该滚的一样频繁,也就是说:直到玩家滚5(本游戏的“点”)或7,这。。的确如此;最后显示的是4-1卷。
实际的“问题”是Player Win
文本被“过早”打印出来。
实际上发生的是系统。退出
和系统。err
是不同的流,不能保证这些流是同步的;如果将“a”打印到系统。退出
,然后立即“b”切换到系统。err
不能保证“a”总是显示在“b”之前——尽管这两个流在内部是一致的;如果将“a”打印到系统。退出
,然后立即将“b”切换到系统。输出
,您可以保证它们始终按该顺序打印。
因此,修复非常简单:选择一个;要么只使用System.err
,要么只使用System.out
。
或者,在你打印的任何时候都在锁上同步,但那是...一些相对高级的java的大量努力。
注意:在绝大多数平台上,系统。退出
和系统。错误
如果最终被同步或有效同步,你需要一些相当具体的设置来见证你所看到的。大多数人将无法复制这种情况。
<代码>car\U gear字段在数据库中填写为“stick”(斗杆)。在图像标记后,输出更改为“自动” 为什么结果是$car\u result1-
问题内容: 我对Java真的很陌生,我读到Java 非常昂贵。我只想知道什么是昂贵的,它又如何昂贵? 谢谢。 问题答案: 也许还没有你想的那么糟 它曾经是可怕的(这可能就是您读到它“非常昂贵”的原因)。这些模因可能需要很长时间才能消失 由于涉及缓存刷新和失效的规则,因此Java语言中的同步块通常比许多平台提供的关键部分功能更为昂贵,而这些平台通常使用原子的“测试并设置位”机器指令来实现。即使程序仅
我试图通过将ajax请求中的for循环的值发送到php文件来检查数据库中的值,“each value in request”,然后文件返回变量“avl”,如果不是,则不可用。 问题是,我检查了一个值流,它们都必须返回才能继续我的过程,但条件不会等到for循环结束才进行检查。它在for循环启动之前检查条件,即使代码也不是那样的。例如:在for循环在第50行结束之前,它在第100行执行条件。 它总是通
问题内容: 我一直在使用“ if”来测试自己的版本,并且一切似乎都正常。当然,如果使用signalAll()而不是signal(),这将导致严重崩溃,但是如果一次仅通知一个线程,这怎么会出错? 他们的代码在这里 -检查put()和take()方法;在Condition的JavaDoc顶部可以看到一个更简单,更重点的实现。 下面是我实施的相关部分。 PS我知道,通常,尤其是在这样的lib类中,应该让
问题内容: 我正在用Java编写电台代码,并且正在使用一个线程来当然播放流。我在线程的run方法中有一个while循环,该循环检查名为ShouldPlay的变量是否为true,以及是否运行该变量。播放器。然后,我有一个pause()方法,将变量设置为false,并且自然希望它在变量为false时不运行播放器。我创建了一个小示例,说明如何在下面进行设置: 我想发生的事情是,当线程首次运行时,它应该打
} 链接:https://www.hackerrank.com/challenges/java-string-compare/problem