0

我是java新手,在网上做练习题。我遇到了这个问题,被困了很长时间。

编写一个名为 diceSum 的类,提示用户输入所需的总和,然后反复掷两个六面骰子,直到它们的总和为所需总和。这是与用户的预期对话:

Desired dice sum: 9
4 and 3 = 7
3 and 5 = 8
5 and 6 = 11
5 and 6 = 11
1 and 5 = 6
6 and 3 = 9

这就是我所做的。

import java.util.Random;
import java.util.Scanner;
public class diceSum{
    public static void main(String[] args){
        System.out.print("Desired dice sum: ");
        Scanner sc=new Scanner(System.in);
        int input=sc.nextInt();

        Random rnd=new Random();
        int r1=rnd.nextInt(7);
        int r2=rnd.nextInt(7);

        int sum=0;
        for(int i=0;i<6;i++){
             sum=r1+r2;
            System.out.println(r1 + "and" + r2 + "=" + sum);

        }

    }
}

我的输出是

Desired dice sum:9
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2

我不明白它为什么会在不给出另一个随机数的情况下打印 0 和 2 6 次。我在想是否应该再创建一些 int r3=rnd.nextInt(7),int r4=rnd.nextInt(7)。但我在想这会很长,但这是一种可能的方法。

4

3 回答 3

3

利用:

int r1;
int r2;
for(int i=0;i<6;i++){
     r1=rnd.nextInt(6) + 1;
     r2=rnd.nextInt(6) + 1;
     sum=r1+r2;
     System.out.println(r1 + "and" + r2 + "=" + sum);
     if (sum == input){
         // This will break once you get the value.
         break;
     }
}

继续并获得新的随机数。也用于rnd.nextInt(6) + 1获得 1 - 6(没有 0)。

您的任务是继续检查直到找到,而不仅仅是 6 次。哟应该改用while循环。

于 2013-03-10T13:28:58.777 回答
1
int r1;
int r2;
for(int i=0;i<6;i++){
     r1=rnd.nextInt(6) + 1;
     r2=rnd.nextInt(6) + 1;
     sum=r1+r2;
     System.out.println(r1 + "and" + r2 + "=" + sum);
     if (sum == input){
         break;
     }
}

但在这里你也不确定得到相同的数字

4 and 3 = 7
3 and 5 = 8
5 and 6 = 11
5 and 6 = 11
1 and 5 = 6    
6 and 3 = 9
于 2013-03-10T13:29:06.110 回答
1

您需要将r1and的声明/初始化移动r2到循环中。否则,它们被设置一次,并在程序运行的其余部分保持不变。

请注意,该作业并不要求您进行六次投掷,而是要求您进行尽可能多的投掷以达到所需的总和。为了确保循环可以停止,您应该检查输入的数字至少为 2 且最多为 12。

另外,这是错误的:

int r2=rnd.nextInt(7);

它给你一个从 0 到 6 的数字,包括 0 到 6,但真正的掷骰子不能产生零。相反,您需要编写

int r2=rnd.nextInt(6)+1;

您的循环应如下所示:

int sum;
do {
    int r1=rnd.nextInt(6) + 1;
    int r2=rnd.nextInt(6) + 1;
    sum=r1+r2;
    System.out.println(r1 + "and" + r2 + "=" + sum);
} while (sum != input);
于 2013-03-10T13:29:11.050 回答