英文:
Counter resets during execution
问题
以下是翻译好的代码部分:
public class PaperRockGame {
private static final int SCISSOR = 1;
private static final int LIZARD = 2;
private static final int PAPER = 3;
private static final int ROCK = 4;
private static final int SPOCK= 5;
private static final int PLAYER1 = 1;
private static final int PLAYER2 = 2;
private String cpuChoice1;
private String cpuChoice2;
private int player1Score;
private int player2Score;
private int lastWinner;
public void setCpuOne() {
String choice;
choice = numberToString(randomNumber());
cpuChoice1 = choice;
}
public void setCpuTwo() {
String choice;
choice = numberToString(randomNumber());
cpuChoice2 = choice;
}
public String getCpuOneValue() {
return cpuChoice1;
}
public String getCpuTwoValue() {
return cpuChoice2;
}
public int getP1Score() {
return player1Score;
}
public int getP2Score() {
return player2Score;
}
public int randomNumber() {
int number = (int)(Math.random() * 5 + 1 );
return number;
}
public String numberToString(int value) {
int number = value;
if (number == 1) {
return "SCISSOR";
}
else if(number == 2) {
return "LIZARD";
}
else if(number == 3) {
return "PAPER";
}
else if(number == 4) {
return "ROCK";
}
else {
return "SPOCK";
}
}
public void playGame(int cpuOne, int cpuTwo) {
if(cpuOne == cpuTwo) {
System.out.println("Tie");
}
else if ((cpuOne == ROCK && ( cpuTwo == SCISSOR || cpuTwo == LIZARD))
||(cpuOne == SCISSOR && ( cpuTwo == PAPER || cpuTwo == LIZARD))
||(cpuOne == PAPER && ( cpuTwo == ROCK || cpuTwo == SPOCK))
||(cpuOne == LIZARD && ( cpuTwo == PAPER || cpuTwo == SPOCK))
||(cpuOne == SPOCK && ( cpuTwo == SCISSOR || cpuTwo == ROCK))){
System.out.println("Player 1 wins");
if(lastWinner == PLAYER1) {
player1Score++;
}
else {
player1Score = 1;
}
lastWinner = PLAYER1;
}
else {
System.out.println("Player 2 wins");
if(lastWinner == PLAYER2) {
player2Score++;
}
else {
player2Score = 1;
}
lastWinner = PLAYER2;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 0;
PaperRockGame play = new PaperRockGame ();
do {
play.setCpuOne();
play.setCpuTwo();
System.out.println(play.getCpuOneValue());
System.out.print(play.getCpuTwoValue());
System.out.println();
play.playGame(play.randomNumber(), play.randomNumber());
System.out.println(play.getP1Score() + " " + play.getP2Score());
x++;
} while(x < 100);
}
}
英文:
I am developing a Paper Rock Spock...game. However the score counter keeps resetting throughout. Can someone shed some light on how I can fix this please? The playGame() method takes two random numbers and match them against known constants. Then it should increment the player1 or player2 score depending on the output of the logical statement.
public class PaperRockGame {
private static final int SCISSOR = 1;
private static final int LIZARD = 2;
private static final int PAPER = 3;
private static final int ROCK = 4;
private static final int SPOCK= 5;
private static final int PLAYER1 = 1;
private static final int PLAYER2 = 2;
private String cpuChoice1;
private String cpuChoice2;
private int player1Score;
private int player2Score;
private int lastWinner;
//private int player2Score;
public void setCpuOne() {
String choice;
choice = numberToString(randomNumber());
cpuChoice1 = choice;
}
public void setCpuTwo() {
String choice;
choice = numberToString(randomNumber());
cpuChoice2 = choice;
}
public String getCpuOneValue() {
return cpuChoice1;
}
public String getCpuTwoValue() {
return cpuChoice2;
}
public int getP1Score() {
return player1Score;
}
public int getP2Score() {
return player2Score;
}
public int randomNumber() {
int number = (int)(Math.random() * 5 + 1 );
return number;
}
public String numberToString(int value) {
int number = value;
if (number == 1) {
return "SCISSOR";
}
else if(number == 2) {
return "LIZARD";
}
else if(number == 3) {
return "PAPER";
}
else if(number == 4) {
return "ROCK";
}
else {
return "SPOCK";
}
}
public void playGame(int cpuOne, int cpuTwo) {
if(cpuOne == cpuTwo) {
System.out.println("Tie");
}
else if ((cpuOne == ROCK && ( cpuTwo == SCISSOR || cpuTwo == LIZARD))
||(cpuOne == SCISSOR && ( cpuTwo == PAPER || cpuTwo == LIZARD))
||(cpuOne == PAPER && ( cpuTwo == ROCK || cpuTwo == SPOCK))
||(cpuOne == LIZARD && ( cpuTwo == PAPER || cpuTwo == SPOCK))
||(cpuOne == SPOCK && ( cpuTwo == SCISSOR || cpuTwo == ROCK))){
System.out.println("Player 1 wins");
if(lastWinner == PLAYER1) {
player1Score++;
}
else {
player1Score = 1;
}
lastWinner = PLAYER1;
}
else {
System.out.println("Player 2 wins");
if(lastWinner == PLAYER2) {
player2Score++;
}
else {
player2Score = 1;
}
lastWinner = PLAYER2;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 0;
PaperRockGame play = new PaperRockGame ();
do {
play.setCpuOne();
play.setCpuTwo();
System.out.println(play.getCpuOneValue());
System.out.print(play.getCpuTwoValue());
System.out.println();
play.playGame(play.randomNumber(), play.randomNumber());
System.out.println(play.getP1Score() + " " + play.getP2Score());
x++;
} while(x < 100);
}
}
答案1
得分: 0
如果当前赢家与上一位赢家不同,您将该玩家的得分重置为一。
默认情况下,Java中原始int的值为0。您可以简单地对其进行递增。
然后只需移除if(lastWinner...
条件,并始终执行player1Score++
或player2Score++
。
英文:
If the current winner differs from the last winner, you are resetting the score for that player to one.
<strike>
I think instead you should initialize player1Score
and player2Score
to 0.
private int player1Score=0;
private int player2Score=0;
</strike>
The default value of a primitive int in Java is 0. You can simply increment it.
Then simply remove the if(lastWinner...
conditional and always do either player1Score++
or player2Score++
.
答案2
得分: 0
删除lastWinner的int类型变量。您不需要它来执行所需的记分逻辑。这意味着您还可以摆脱使用此变量的任何代码。
就这样说吧。如果玩家1获胜,只需增加玩家1的分数。没有人关心谁赢得了上一场比赛。所有比赛结束时的总分将最终讲述故事。同样,如果玩家2获胜,只需增加玩家2的分数。所以......
public void playGame(int cpuOne, int cpuTwo) {
if(cpuOne == cpuTwo) {
System.out.println("平局");
}
else if ((cpuOne == ROCK && ( cpuTwo == SCISSOR || cpuTwo == LIZARD))
||(cpuOne == SCISSOR && ( cpuTwo == PAPER || cpuTwo == LIZARD))
||(cpuOne == PAPER && ( cpuTwo == ROCK || cpuTwo == SPOCK))
||(cpuOne == LIZARD && ( cpuTwo == PAPER || cpuTwo == SPOCK))
||(cpuOne == SPOCK && ( cpuTwo == SCISSOR || cpuTwo == ROCK))){
System.out.println("玩家1获胜");
player1Score++;
}
else {
System.out.println("玩家2获胜");
player2Score++;
}
}
英文:
Get rid of the lastWinner int type variable. You just don't need it to carry out the required logic for score keeping. This then means that you can also get rid of any code that uses this variable.
Let's put it this way. If Player 1 wins then simply increment the Player 1 score. No one cares who won the previous game. The overall score at the end of all games will finally tell the tale. On the same token, if Player 2 wins then simply increment the Player 2 score. So.....
public void playGame(int cpuOne, int cpuTwo) {
if(cpuOne == cpuTwo) {
System.out.println("Tie");
}
else if ((cpuOne == ROCK && ( cpuTwo == SCISSOR || cpuTwo == LIZARD))
||(cpuOne == SCISSOR && ( cpuTwo == PAPER || cpuTwo == LIZARD))
||(cpuOne == PAPER && ( cpuTwo == ROCK || cpuTwo == SPOCK))
||(cpuOne == LIZARD && ( cpuTwo == PAPER || cpuTwo == SPOCK))
||(cpuOne == SPOCK && ( cpuTwo == SCISSOR || cpuTwo == ROCK))){
System.out.println("Player 1 wins");
player1Score++;
}
else {
System.out.println("Player 2 wins");
player2Score++;
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论