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中完成的。