我是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)。 但我认为这将是漫长的,但这是一种可行的方法。
答案 0 :(得分: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
循环。
答案 1 :(得分: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
答案 2 :(得分:1)
您需要将r1
和r2
的声明/初始化移动到循环中。否则,它们会被设置一次,并在程序运行的其余部分保持不变。
请注意,作业不会要求您进行六次投掷,它会要求您尽可能多地执行所需的总和。为了确保循环可以停止,您应该检查输入的数字是否至少为2,最多为12。
另外,这是错误的:
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);