当前位置: 首页 > 知识库问答 >
问题:

不明白为什么不能正确解决

穆华彩
2023-03-14

所以,我正在为一个班级做这个作业。这是一个Java类,我应该做一个游戏,它掷两个骰子,把它们相加,然后把它们加到你的回合分数上。然后它会问你是否想继续玩下去。当你的轮次得分达到20分,或者当你决定通过时,它会进入电脑。它应该打印每个回合的分数,然后当有人得到100分时,它就会宣布胜利者。然而,不管怎样,无论我跑了多少圈,每一圈结束时的分数都是0。当一名玩家掷1时,他们的回合分数被取消,并转移到另一名玩家身上,如果他们掷双1,他们将失去目前为止在比赛中的所有分数。这是我的代码,你能找出为什么分数变量不更新吗?非常感谢。

import java.util.Scanner;
import java.util.Random;
public class PlayPig {

    public static void main(String[] args) {
        // TODO Auto-generated method stub  
        Scanner scan = new Scanner(System.in);
        int player1 = 0;
        int player2 = 0;
        int a, b, c, player1turn, player2turn, input;
        int pig = 1;
        Random r = new Random();
        do{
            do {
                player1turn=0;
                a = r.nextInt(6)+1;
                b = r.nextInt(6)+1;
                    if( a==1 || b==1){
                        if (a == 1 && b == 1){
                            player1=0;
                            break;}
                        else if (a==1 || b==1){
                            player1turn=0;
                            break;}
                    else {
                        player1turn= a+b ;
                        }}
                    player1= player1+player1turn;
                System.out.println("Player1 score is " + player1 + " and player2 score is " + player2);
                System.out.print("Do you want to keep playing? Enter 1 to continue. Enter any other number to pass.");
                input = scan.nextInt();
                    if (input != 1)
                        break;
            }
            while       
                (player1turn <= 20);
            do{
                player2turn=0;
                a = r.nextInt(6)+1;
                b = r.nextInt(6)+1;
                if( a==1 || b==1){
                    if (a == 1 && b == 1){
                        player2=0;
                        break;}
                    else if (a==1 || b==1){
                        player2turn=0;
                        break;}
                else {
                    player1turn= a+b ;
                    player2= player2+player2turn;}}
            }
            while
                (player2turn<=20);
        }
        while 
            (player1 < 100 || player2 < 100);
        if (player1>player2)
            System.out.print("Player 1 wins");
        else
            System.out.print("Player 2 wins");

}}

共有2个答案

傅博容
2023-03-14

我已经修改了if循环。你可以试试这个:

import java.util.Scanner;
import java.util.Random;
public class PlayPig {

public static void main(String[] args) {
    // TODO Auto-generated method stub  
    Scanner scan = new Scanner(System.in);
    int player1 = 0;
    int player2 = 0;
    int a, b, c, player1turn, player2turn, input;
    int pig = 1;
    Random r = new Random();
    do{
        do {
            player1turn=0;
            a = r.nextInt(6)+1;
            b = r.nextInt(6)+1;
                if (a == 1 && b == 1){
                        player1=0;
                        break;
                }
                else if((a== 1 && b!= 1) || (a!=1 && b== 1){
                    player1turn=0;
                    break;
                }
                else{
                    player1turn= a+b ;
                }
                player1= player1+player1turn;
            System.out.println("Player1 score is " + player1 + " and player2          score is " + player2);
            System.out.print("Do you want to keep playing? Enter 1 to      continue. Enter any other number to pass.");
            input = scan.nextInt();
                if (input != 1)
                    break;
        }
        while       
            (player1turn <= 20);
        do{
            player2turn=0;
            a = r.nextInt(6)+1;
            b = r.nextInt(6)+1;
            if (a == 1 && b == 1){
                        player2=0;
                        break;
                }
                else if((a== 1 && b!= 1) || (a!=1 && b== 1){
                    player2turn=0;
                    break;
                }
                else{
                    player2turn= a+b ;
                }
                player2= player2+player2turn;
        }
        while
            (player2turn<=20);
    }
    while 
        (player1 < 100 || player2 < 100);
    if (player1>player2)
        System.out.print("Player 1 wins");
    else
        System.out.print("Player 2 wins");

}}
郎成龙
2023-03-14

主要问题是,您分配当前分数的else条件位于错误的块中。(这些人):

else {
    player1turn = a+b ;
} 

请尝试以下代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub  
    Scanner scan = new Scanner(System.in);
    int player1 = 0;
    int player2 = 0;
    int a, b, c, player1turn, player2turn, input;        
    int pig = 1;
    Random r = new Random();
    do{

        do {

            player1turn=0;
            a = r.nextInt(6)+1;
            b = r.nextInt(6)+1;
                if( a==1 || b==1){
                    if (a == 1 && b == 1){
                        player1 = 0;
                        break;
                    }
                    else if (a==1 || b==1){
                        player1turn=0;
                        break;
                    }
                }else {
                    player1turn = a+b ;
                }
            player1 += player1turn;
            System.out.println("Player1 score is " + player1 + " and player2 score is " + player2);
            System.out.print("Do you want to keep playing? Enter 1 to continue. Enter any other number to pass.");
            input = scan.nextInt();
                if (input != 1){
                    break;
                }
        } while (player1turn <= 20);

        do{
            player2turn=0;
            a = r.nextInt(6)+1;
            b = r.nextInt(6)+1;

            if( a==1 || b==1){
                if (a == 1 && b == 1){
                    player2=0;
                    break;
                } else if (a==1 || b==1){
                    player2turn=0;
                    break;
                }               
            }else {
                player2turn = a+b ;
                player2 += player2turn;
            }

        }while (player2turn<=20);

    } while (player1 < 100 || player2 < 100);
    if (player1>player2)
        System.out.print("Player 1 wins");
    else
        System.out.print("Player 2 wins");

}
 类似资料:
  • 尽管有值,但我不能得到一个用户的值的和时间。 即使用户17有工作时间值,我也会在sumTW列中得到该用户的NULL值。我该怎么解决? 这就是我的查询看起来的样子: 下面是表格代码: (这个表和原来的不一样,原来的有外键。我去掉它们只是为了能够再现同样的问题,同样的问题被报告了)。

  • 当用户键入以下内容的答案时:system.out.println(“键入数字”); 它不会继续到我的代码的下一部分。

  • ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 为什么会这样?因为我指定了在不满足任何条件的情况下分配给列的值。

  • 还不起作用。所以我放弃链接,我只是编码:

  • 你好,谢谢你花时间处理我的问题。首先让我向你介绍我的虚拟/培训项目。下面列出的类应该代表MVC模型(模型、视图、控制器)之后的程序。运行主类时,会打开FileChooser,从中可以选择. csv-File,其中包含保存为String[][]的信息。这个String[][]然后在视图类中可视化为JTable。这个JTable是带有BorderLayout的JFrame中的JPanel的一部分。中心

  • 我有字符串格式的日期,我想解析成使用日期。 我将其解析为: 但奇怪的是,如果我通过"03-08-201309hjhkjhk"或"03-88-2013"或43-88-201378",它不会抛出错误,它会解析它。 现在,我必须编写正则表达式模式来检查日期的输入是否正确。但为什么会这样呢?? 代码: