0

好的,所以,我对java很陌生。
我正在为一个我长期搁置的项目设计一个分数计算器。不过,就我自己的知识而言,我想知道如何做到这一点。

该程序应该要求每个玩家掷骰子,并将其添加到之前的掷骰中。
我假设一个while循环可以完成这个,但每次它通过循环时,它都会将变量重置为当前滚动。因此,我无法得到总...

下面是一些代码:

    static int players;
    static String p1;
    static String p2;
    static String p3;
    static String p4;
    static int maxScore;
    static int roll1;
    static int roll2;
    static int roll3;
    static int roll4;
    static int total1;
    static int total2;
    static int total3;
    static int total4;
    public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Enter number of players: ");
    players=keyboard.nextInt();
    System.out.print("Enter Maximum Score: ");
    maxScore=keyboard.nextInt();
    if(players==2){                    //will add more ifs when i get the code right
        System.out.println("Please enter players names.");
        System.out.print("Player 1: ");
        p1=keyboard.next();
        System.out.print("Player 2: ");
        p2=keyboard.next();
        System.out.println(p1 + "\t \t " + p2 + "\n"
        + "_______ \t _______ \n" );  //displays scorecard look with players names

        {


        while (total1 < maxScore && total2<maxScore) { 
        //scorecard quits when maxScore is reached by either player
        int roll;
        total1=(roll+roll1); 

        System.out.print("");
        roll=keyboard.nextInt(); //asks for current roll

        System.out.print("\n"+"_____"+"\n");
        System.out.print(roll+"+"+"\n"+roll1+"\n"+"_____"+"\n"+(roll+roll1)+"\n");
        /*i want this to display total score + last roll and then 
        *total it again on the next line*/
        roll1=roll;
        }
4

3 回答 3

1

如果我正确阅读了您的问题,那么解决方案是

total1+=(roll+roll1); 

这与

total1= total1+(roll+roll1); 

您只是没有将卷添加到总价值中!

另外需要注意的是,将实例变量设置为 public 和 static 并不是一个好主意。如果它们是私有的而不是静态的会更好。例如

    private int players;

希望答案有帮助

于 2013-04-15T21:19:52.337 回答
1

Java 编程进度的一些提示:

  1. 该变量roll没有任何作用。roll1,依此类推,将存储每个玩家的最后一卷。

  2. 如果可能的话,初始化你的变量。应该避免依赖默认值,因为它可能会在您学习时给您带来问题(NullPointerException有时会拜访您)。

  3. 在你的循环中,你有total1=(roll+roll1);. 这是错误的。在程序到达这一点时,您的变量 ,total1尚未初始化。由于它们是整数,它们被(默默地)初始化为 0,因此此时会产生 0,这并没有多大作用。在此之后,您继续检索卷。换一种方式试试,先滚动,然后加起来。rollroll1total1

  4. 您提到您是 Java 新手,但是,在未来的某个时候,您可能会考虑使用数组来实现这个相同的程序。您会注意到它为您节省了很多您现在编写的重复代码。

总结并翻译成代码指南(适用于 2 名玩家):

public class MyScoreCalculator {
    static String p1 = "";
    static String p2 = "";
    static int maxScore = 0;
    static int roll1 = 0;
    static int roll2 = 0;
    static int total1 = 0;
    static int total2 = 0;

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        // Dialogue to get data...
        // Display scorecard look with players names

        while (total1 < maxScore && total2 < maxScore) { 
            //scorecard quits when maxScore is reached by either player
            roll1 = keyboard.nextInt(); // ask for current roll

            System.out.println(total1 + "+");
            System.out.println(roll1);
            System.out.println("_____");
            System.out.println(roll1 + total1);

            total1 = total1 + roll1;

            // Do the same for next player.
        }
    }
}
于 2013-04-15T21:45:53.347 回答
0

您的 total1 计算应该total1 += roll在新的滚动输入之后发生。此外,如果 roll1 代表最后一卷,请相应地命名变量,它更具可读性。

由于您有很多参与者,因此请尝试抽象概念并将输入与“会计”分开。例如,您可以创建一个 PlayerScore 类,其中包含总和最后一个输入(以及玩家的姓名),并使用一个负责添加和保存最后一个输入以及漂亮打印信息的方法。然后,您可以收集 PlayerScore 并对其进行迭代,询问当前滚动并更新信息。

于 2013-04-15T21:51:52.507 回答