gpt4 book ai didi

java - Java 中的循环和条件

转载 作者:搜寻专家 更新时间:2023-11-01 02:06:19 25 4
gpt4 key购买 nike

编辑。问题的字符串比较部分已经解决,但是当 2 个骰子中只有一个 1 时,代码仍然不会转到下一个玩家,只有当两个骰子都是 1 时,它才会转到下一个玩家。

这是到目前为止的代码,第一节课几乎来自教科书,第二节课的主要方法是我所做的。

该程序正在尝试创建一个名为pig 的骰子游戏。如果有兴趣,简单的规则在代码的底部,但主要问题。

我遇到的是它没有正确循环,当我没有将 y 放入扫描仪以再次发出滚动信号时,它就像我输入了 y,当我不这样做的时候。此外,if 语句无法正常工作,因为当玩家用一个骰子掷出 1 时,它不会转到下一个玩家。

抱歉,如果我没有正确解释问题。我也不想再使用任何方法或类。我假设有比我正在做的方式更快的方法来完成这个,但那是为了以后,如果我想在我的代码中使用额外的方法。我也有计算点数的问题,因为有时它不会适本地改变它们,但一旦剩下的工作正常我就可以解决这个问题。

这是第一段代码。这段代码对问题来说并不是很重要,但是如果你想知道我在 main 中调用了哪些方法,你可以看看这些:

import java.util.Random;

public class PairOfDice {

private final int MAX = 6;
private int faceValue;
private int faceValue1;

Random generator0 = new Random();
Random generator1 = new Random();

public PairOfDice(){
faceValue = 1;
faceValue1 = 1;
}

public int getFaceValue() {
return faceValue;
}

public void setFaceValue(int faceValue) {
this.faceValue = faceValue;
}

public int getFaceValue1() {
return faceValue1;
}

public void setFaceValue1(int faceValue1) {
this.faceValue1 = faceValue1;
}

public int rollOne() {
faceValue = generator0.nextInt(MAX) + 1;

return faceValue;
}

public int rollTwo() {
faceValue1 = generator1.nextInt(MAX) + 1;

return faceValue1;
}

public int sumOfRoll() {
return faceValue + faceValue1;
}

@Override
public String toString() {
return "First roll of the die: \t" + rollOne()
+ "\nSecond roll of the die: " + rollTwo()
+ "\nThe sum of both rolls: \t" + sumOfRoll();
}
}

下一段代码是我自己的。我更新了代码中的一些内容,现在在比较字符串时使用 .equals,我更改了 while 条件并稍微简化了 if 语句。

public class NewClass {

public static void main(String[] args) {

PairOfDice player1 = new PairOfDice();
PairOfDice player2 = new PairOfDice();
Scanner scan = new Scanner(System.in);

int p1 = 33, p2 = 0, turnp1 = 0, turnp2 = 0, signal = 1;

while (p1 <= 100 || p2 >= 100) {
int newp1total = p1;
turnp1 = 0;
while (turnp1 <= 20 && signal == 1) {

System.out.println("Player 1s Turn!");
int die1 = player1.rollOne();
int die2 = player1.rollTwo();
int sumofdice = player1.sumOfRoll();
System.out.println("Player 1: First Die: " + die1 + " Second Die:" + die2 + " Sum of Roll: " + sumofdice);
if (sumofdice == 2) {
p1 = 0;
turnp1 = 0;
signal = -1;
System.out.println("Player rolled a two 1s. All players points are forfeited. Next Players turn.");
System.out.println("Points this turn:" + turnp1);
System.out.println("Points this game: " + p1);
System.out.println();
} else if (die1 == 1 || die2 == 1) {
turnp1 = 0;
signal = -1;
p1 = newp1total;
System.out.println("Player rolled a 1. All points on this round are forfeited. Next Players turn.");
System.out.println("Points this turn:" + turnp1);
System.out.println("Points this game: " + p1);
System.out.println();
} else {
turnp1 += sumofdice;
p1 += sumofdice;
System.out.println("Points this turn:" + turnp1);
System.out.println("Points this game: " + p1);
System.out.println();
signal = 1;
}
}

signal = 1;
String yesno = "y";
int newp2total = p2;
while (yesno.toLowerCase().equals("y") && signal == 1) {
System.out.println("Player 2s Turn!");
int die1 = player2.rollOne();
int die2 = player2.rollTwo();
int sumofdice = player2.sumOfRoll();
System.out.println("Player 2: First Die: " + die1 + " Second Die:" + die2 + " Sum of Roll: " + sumofdice);

if (sumofdice == 2) {
p2 = 0;
turnp2 = 0;
signal = -1;
System.out.println("Player rolled a two 1s. All players points are forfeited. Next Players turn.");
System.out.println("Points this turn:" + turnp2);
System.out.println("Points this game: " + p2);
System.out.println();
} else if (die1 == 1 || die2 == 1) {
signal = -1;
turnp2 = 0;
p2 = newp2total;
System.out.println("Player rolled a 1. All points on this round are forfeited. Next Players turn.");
System.out.println("Points this turn:" + turnp2);
System.out.println("Points this game: " + p2);
System.out.println();
} else {
turnp2 += sumofdice;
p2 += sumofdice;
System.out.println("Points this turn:" + turnp2);
System.out.println("Points this game: " + p2);
System.out.println();
System.out.println("Try your luck? Y/N");
yesno = scan.next();
System.out.println();
signal = 1;
}
}
}
}
}

最佳答案

首先,这是一个重要的概念,当比较字符串时总是使用.equals,而不是==。例如

yesno.toLowerCase() == "y" && signal == 1

应该是

 yesno.toLowerCase().equals("y") && signal.equals 1

这是因为 y 是一个字符串。如果 y 是 int y,那么您将使用 ==。如果要比较 y 并且不断更改值,则可以使用 =。接下来的事情;我知道使用 getter 和 setter 可能是您教科书中作业的一部分,但除非是;不要使用它们。

阅读此 article .

它使代码很难遵循。您的代码在其他方面做得很好,我喜欢您尊重 Java 代码约定!

此外,确保对字符串使用 .equals,对整数使用 ==。如果你正在比较整数,我相信你是为了 int 变量,你需要使用 ==。另外,我认为您可能对 and or 概念感到困惑。如果您有一个 if 语句并且正在比较事物并且需要两个语句都为真,请使用“&&”如果您只需要一个语句为真,请使用 || (这个键就是回车上面那个带shift的键)

关于java - Java 中的循环和条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132117/

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