Java For循环输出不是我想要的

Java For循环输出不是我想要的,java,Java,我是一名java新手,在网上做practiceit问题。我遇到了这个问题,并被困了很长一段时间 编写一个名为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 ja

我是一名java新手,在网上做practiceit问题。我遇到了这个问题,并被困了很长一段时间

编写一个名为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);

        }

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

使用:

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;
     }
}
intr1;
int r2;
对于(int i=0;i使用:

intr1;
int r2;

对于(int i=0;i您需要将
r1
r2
的声明/初始化移动到循环中。否则,它们设置一次,并在程序运行的其余部分保持不变

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

此外,这是错误的:

int r2=rnd.nextInt(7);
它给你一个从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);

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

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

此外,这是错误的:

int r2=rnd.nextInt(7);
它给你一个从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);


你需要在你的循环中得到更多的随机整数…因为你在循环外创建了随机数。所以我应该创建更多的int r3,int r4等等?用调试器一步一步地检查代码,你应该清楚为什么没有得到新的随机数。如果你没有从代码中立即看到它,你真的应该一步一步地检查它,这应该是很有启发性的!你需要在你的循环中获得更多的随机整数…因为你在循环外创建了随机数。所以我应该创建更多的int r3、int r4等等?使用调试器逐步检查代码,应该会清楚为什么你没有得到新的随机数。如果你没有从代码中立即看到它,你就会真的应该一步一步地完成它,这应该是很有启发性的!抱歉只是澄清一下。如果我把r1和r2放入循环中,他们会继续循环并给我新的输出,对吗?因为我总是得到错误的输出,因为我不知道什么时候应该把这些变量放入循环中还是外部?你应该在循环外部声明变量,但在循环内部分配它们e、 抱歉,再次澄清一下。因此我将在循环外初始化int r1=0和r2=0,并在循环内执行r1=rnd.nextInt(6)+1;和r2=rnd.nextInt(6)+1;您不需要将其设置为零,但可以。我的代码应该可以工作…嗨。非常抱歉问了这么多问题。这不是“if(sum==输入)”吗{break;redund?抱歉,我只是想澄清一下。如果我把r1和r2放入循环,它们会继续循环,并正确地给我新的输出?因为我总是得到错误的输出,因为我不知道什么时候应该把这些变量放入循环内还是循环外?你应该在循环外声明变量,但在循环内赋值。抱歉,只是想再次澄清一下。所以我我将在循环外初始化int r1=0和r2=0,并在循环内执行r1=rnd.nextInt(6)+1;和r2=rnd.nextInt(6)+1;您不需要将其设置为零,但您可以。我的代码应该可以工作…嗨。非常抱歉问了这么多问题。这不是“if(sum==输入)”吗{break;redundant?如何正确缩进代码并显示显式操作?如何正确缩进代码并显示显式操作?