Java 如何计算代码中的playerwins
是的,所以我的任务是制作一个石头、纸、剪刀游戏。我做的几乎每件事都是对的(也许),但当停止一场石头、布、剪刀的游戏时,我不知道如何计算最后的玩家人数。这是我在运行和停止代码时遗漏的一件事 玩家在最底层和最高层。代码很长,但我对编码很陌生,不知道如何减少冗余Java 如何计算代码中的playerwins,java,Java,是的,所以我的任务是制作一个石头、纸、剪刀游戏。我做的几乎每件事都是对的(也许),但当停止一场石头、布、剪刀的游戏时,我不知道如何计算最后的玩家人数。这是我在运行和停止代码时遗漏的一件事 玩家在最底层和最高层。代码很长,但我对编码很陌生,不知道如何减少冗余 import java.util.*; import java.io.*; public class RockPaperScissors { public static void main(String[] args) {
import java.util.*;
import java.io.*;
public class RockPaperScissors {
public static void main(String[] args) {
Scanner dodongo = new Scanner(System.in);
Random hamster = new Random();
System.out.println("Rock, Paper, Scissors!");
System.out.println("Press 1 for Rock, 2 for Paper, or 3 for Scissors");
while (!dodongo.hasNextInt(4)) {
System.out.println("Only numbers 1-3!");
System.out.println("Press 1 for Rock, 2 for Paper, or 3 for Scissors");
dodongo.next();
}
int player = dodongo.nextInt();
int rock = 1;
int paper = 2;
int scissors = 3;
int playerwins = 0;
System.out.println("YOU: Rock, Paper, Scissors! ");
System.out.println();
if ((player >= 0) && (player <= 1)) {
System.out.println("Rock!");
} else if ((player >= 1) && (player <= 2)) {
System.out.println("Paper!");
} else if ((player >= 2) && (player <= 3)) {
System.out.println("Scissors!");
}
System.out.println("Computer is playing...");
int shoot = -1;
System.out.println("COM: Rock, Paper, Scissors!");
do {
int keyblade = hamster.nextInt(3) + 1;
if ((keyblade >= 0) && (keyblade <= 1)) {
System.out.println("Rock!");
} else if ((keyblade >= 1) && (keyblade <= 2)) {
System.out.println("Paper!");
} else if ((keyblade >= 2) && (keyblade <= 3)) {
System.out.println("Scissors!");
}
shoot++;
if ((player == rock) && (keyblade == paper)) {
System.out.println("COM Win!");
System.out.println("You Lose! Paper beats rock, because a piece of paper can cover a rock!");
} else if ((player == rock) && (keyblade == scissors)) {
System.out.println("You Win! Rock beats scissors, because a rock can break a pair of scissors!");
} else if ((player == paper) && (keyblade == rock)) {
System.out.println("You Win! Paper beats rock, because a piece of paper can cover a rock!");
} else if ((player == paper) && (keyblade == scissors)) {
System.out.println("COM Win!");
System.out.println("You Lose! Scissors beats paper, because scissors can cut paper!");
} else if ((player == scissors) && (keyblade == rock)) {
System.out.println("COM Win!");
System.out.println("You Lose! Rock beats scissors, because a rock can break a pair of scissors!");
} else if ((player == scissors) && (keyblade == paper)) {
System.out.println("You Win! Scissors beats paper, because scissors can cut paper!");
} else {
System.out.println("Tie!");
}
playerwins++;
} while (shoot != 0);
System.out.println("Want to play again?(Press Y or N)");
String tryagain = dodongo.next();
if (tryagain.equalsIgnoreCase("Y")) {
main(null);
} else {
System.out.println("Adios...");
System.out.println("Total Wins: " + playerwins);
}
System.out.println();
}
}
import java.util.*;
导入java.io.*;
公营剪纸机{
公共静态void main(字符串[]args){
扫描仪dodongo=新扫描仪(System.in);
随机仓鼠=新随机();
System.out.println(“石头、布、剪刀!”);
System.out.println(“按1表示石头,按2表示纸,或按3表示剪刀”);
而(!dodongo.hasnetint(4)){
System.out.println(“仅数字1-3!”);
System.out.println(“按1表示石头,按2表示纸,或按3表示剪刀”);
多东戈;
}
int player=dodongo.nextInt();
int rock=1;
整版纸=2;
int=3;
int playerwins=0;
System.out.println(“你:石头、布、剪刀!”);
System.out.println();
如果((玩家>=0)&&(玩家=1)&&&(玩家=2)&&&(玩家=0)&&&&(钥匙刀锋=1)&&&(钥匙刀锋=2)&&(钥匙刀锋编写任何游戏时,您首先需要一个游戏循环,它运行游戏直到用户退出。有趣的是,您选择递归调用main,这也是可能的(虽然从理论上讲,这可能会导致堆栈过载,但在这种简单的情况下可能不会发生,但在一个每秒循环多次的游戏中,这可能是一个真正的问题)
因此,最简单的修复方法是将playerwins
变量移出main函数(然后还需要将其设置为静态),但为以后的工作建立更好习惯的正确代码是使用另一个while循环,而不是递归调用main
通常情况下,初学者从迭代代码开始,然后再发现递归,所以很高兴您这么早就发现了它,但不幸的是,这不是正确的情况,而是将它放在口袋里,以备其他场合使用。我将您的代码分解为方法。在大多数情况下,这只是将代码组织得更好一些。我能够使用writeInput
方法使用了两次,因此我也稍微减少了重复
一旦我创建了方法,main方法中的代码就被缩减到可以使用do-while循环创建一个游戏循环并删除递归
我还修正了playerwins
计数,使其仅在玩家获胜时增加。修正后的代码位于compareInputs
方法中
这是添加方法后的代码
import java.util.Random;
import java.util.Scanner;
public class RockPaperScissors {
public static void main(String[] args) {
Scanner dodongo = new Scanner(System.in);
Random hamster = new Random();
int playerwins = 0;
String tryagain;
do {
int player = readPlayerInput(dodongo);;
System.out.println("YOU: Rock, Paper, Scissors! ");
System.out.println();
writeInput(player);
System.out.println("Computer is playing...");
System.out.println("COM: Rock, Paper, Scissors!");
int keyblade = hamster.nextInt(3) + 1;
writeInput(keyblade);
playerwins += compareInputs(player, keyblade);
System.out.println("Want to play again?(Press Y or N)");
tryagain = dodongo.next();
} while (tryagain.equalsIgnoreCase("Y"));
System.out.println("Adios...");
System.out.println("Total Wins: " + playerwins);
System.out.println();
}
private static int readPlayerInput(Scanner dodongo) {
System.out.println("Rock, Paper, Scissors!");
System.out.println("Press 1 for Rock, 2 for Paper, or 3 for Scissors");
while (!dodongo.hasNextInt(4)) {
System.out.println("Only numbers 1-3!");
System.out.println("Press 1 for Rock, 2 for Paper, or 3 for Scissors");
dodongo.next();
}
return dodongo.nextInt();
}
private static void writeInput(int input) {
if ((input >= 0) && (input <= 1)) {
System.out.println("Rock!");
} else if ((input >= 1) && (input <= 2)) {
System.out.println("Paper!");
} else if ((input >= 2) && (input <= 3)) {
System.out.println("Scissors!");
}
}
private static int compareInputs(int player, int keyblade) {
int rock = 1;
int paper = 2;
int scissors = 3;
int playerWins = 0;
if ((player == rock) && (keyblade == paper)) {
System.out.println("COM Win!");
System.out.println("You Lose! Paper beats rock, because a "
+ "piece of paper can cover a rock!");
} else if ((player == rock) && (keyblade == scissors)) {
System.out.println("You Win! Rock beats scissors, because a "
+ "rock can break a pair of scissors!");
playerWins = 1;
} else if ((player == paper) && (keyblade == rock)) {
System.out.println("You Win! Paper beats rock, because a "
+ "piece of paper can cover a rock!");
playerWins = 1;
} else if ((player == paper) && (keyblade == scissors)) {
System.out.println("COM Win!");
System.out.println("You Lose! Scissors beats paper, because "
+ "scissors can cut paper!");
} else if ((player == scissors) && (keyblade == rock)) {
System.out.println("COM Win!");
System.out.println("You Lose! Rock beats scissors, because a "
+ "rock can break a pair of scissors!");
} else if ((player == scissors) && (keyblade == paper)) {
System.out.println("You Win! Scissors beats paper, because "
+ "scissors can cut paper!");
playerWins = 1;
} else {
System.out.println("Tie!");
}
return playerWins;
}
}
import java.util.Random;
导入java.util.Scanner;
公营剪纸机{
公共静态void main(字符串[]args){
扫描仪dodongo=新扫描仪(System.in);
随机仓鼠=新随机();
int playerwins=0;
字符串tryagain;
做{
int player=readPlayerInput(dodongo);;
System.out.println(“你:石头、布、剪刀!”);
System.out.println();
写入输入(播放器);
System.out.println(“计算机正在播放…”);
System.out.println(“COM:石头、布、剪刀!”);
int keyblade=仓鼠。nextInt(3)+1;
写入输入(键刃);
playerwins+=比较输入(玩家、钥匙刀);
System.out.println(“想再次播放吗?(按Y或N)”;
tryagain=dodongo.next();
}而(tryagain.equalsIgnoreCase(“Y”));
System.out.println(“再见…”);
System.out.println(“总胜利:+playerwins”);
System.out.println();
}
专用静态整型读取器输入(扫描仪dodongo){
System.out.println(“石头、布、剪刀!”);
System.out.println(“按1表示石头,按2表示纸,或按3表示剪刀”);
而(!dodongo.hasnetint(4)){
System.out.println(“仅数字1-3!”);
System.out.println(“按1表示石头,按2表示纸,或按3表示剪刀”);
多东戈;
}
返回dodongo.nextInt();
}
私有静态void writeInput(int输入){
如果((输入>=0)和((输入=1)和((输入=2)和((输入=2)只需在每个条件下将playerwins++集成到你的if/else if条件树中,玩家1就赢了。例如,如果((播放器==剪刀)和(&((键盘==纸)){System.out.println(“你赢了!剪刀比纸,因为剪刀能剪纸!”);playerwins++}注意:main(null)
是个坏主意。@mceponder,,还有其他方法重复主循环吗?@donkeyollie a,而
循环应该可以做到“…不知道如何减少冗余”方法。方法是对Java代码进行分组的一种很好的方式。类也很好。谢谢你,我比较代码只是为了从我犯的错误中吸取教训。谢谢你,很难得到方法集。但是我总是把它发回main,因为除了教方法的作业外,大多数作业都是在main中完成的。