创建龙与地下骰子滚轮

时间:2015-09-19 01:57:38

标签: java dice

我的任务是创建一个Dungeons and Dragons骰子滚动程序,其中四个骰子被滚动,最高的三个数字被记录,最低的数字被推到一边。

程序需要使用面向对象编程,这就是我遇到问题的地方。

此外,不能使用嵌套的If语句或循环。

我试图弄清楚如何将每个类彼此分开编码。

我需要一个运行程序本身的类,一个询问使用该程序的人他们想要滚动多少组骰子,一个实际代表骰子组的类,一个类代表掷骰子系列(这显示了骰子1滚动的东西,骰子2滚动的东西等),最后是一个处理单个骰子滚动的类。

我知道输出需要显示每组掷骰子。

输出需要如下所示:

Set 1: 11, 12, 3, 1
Set 2: 12, 3, 1, 4

等等。

此外,在尝试创建此程序时,最让我失望的是,我被要求在没有嵌套if语句或循环的情况下使用它。

2 个答案:

答案 0 :(得分:0)

应该可以使用两个类来完成此问题的解决方案:主类和Dice类。

您的主要课程应该有main(){},其中包含提示用户输入和打印骰子的代码。

你的Dice类中可能只需要两个方法,它们将是一个构造函数和一个骰子值的getter。

您的骰子构造函数可以在创建骰子时将骰子对象的掷骰值设置为1到6的随机数(假设您的DnD掷骰使用D6)。这将使您无需调用另一种方法来实际“滚动”骰子。

然后,您可以使用getter获取main()的滚动值以获取滚动值。此getter只需要返回roll的值。

你需要一个Dice类的成员变量,它可以保存为新骰子生成的随机值 - 我建议int,因为你只需要整数。

在你的main(){}中,你可以使用扫描仪来获取用户输入他们想要掷骰子的数量。根据它们的输入,您可以使用for循环,其中根据用户的输入检查条件。 (例如for(int i = 0 ; i <userInput ; i ++))。对于用户想要滚动的每组骰子,循环将迭代一次。

在此循环中,您可以在循环的每次迭代中创建四个Dice个对象。这将有效地为您提供四个“滚动”,因为每个模具都是用随机数实例化的。

假设你给你的'Dice'类中存有骰子值的成员变量一个像roll这样的名字,你可以通过点符号来访问骰子的值,如dice1.roll()这可以在你的输出中使用而不是需要将返回的值赋值给另一个变量。

最后,要检查哪个卷是最低的,您可以使用一系列if - else语句来检查哪个卷最低。我建议使用如下的条件

if(dice1.roll() < dice2.roll() && dice1.roll() < dice3.roll() && dice1.roll() < dice3.roll()){ //print your dice rolls. If the condition is true, we know that dice1 had the //lowest roll }

然后你可以使用else来检查dice2是否是最低的,如果要检查dice3则是另一个,而另一个是检查dice4。

在sudo代码中,您的主类可能看起来像这样

\\main

\\declare a scanner
\\declare int for user input

\\output: How many dice would you like to roll
\\input user input var is assigned the value of user input


\\for loop checking if i < userInput
   \\Create new dice object dice1
   \\Create new dice object dice2
   \\Create new dice object dice3
   \\Create new dice object dice4

   \\check if dice1 is lowest
       \\print out die rolls, totals, and lowest roll
   \\else if check dice2 is lowest
       \\print out die rolls, totals, and lowest roll
   \\else if check dice3 is lowest
       \\print out die rolls, totals, and lowest roll
   \\else if check dice4 is lowest
       \\print out die rolls, totals, and lowest roll

\\end for loop this loop will iterate how ever many times the user input
    \\each loop will create 4 dice objects with random D6 values
    \\essentially give you 4 "rolls" for each iteration of the loop

此主类没有嵌套循环或if语句。

您的Dice课程可能看起来像这样

\\ Dice

\\declare a private int named something like roll to hold the random value

\\constructor
    \\assign roll a random int value between 1 and 6


\\getter
    \\return the random value

这应该足以让你入门。

作为一个额外的好处,如果你想让程序“运行”并要求用户另外一组骰子并再次滚动 - 一遍又一遍直到你关闭程序 - 你可以包装main()的正文,在您提示用户输入之前开始,并且while循环始终为true。这会创建一个无限循环(和嵌套循环,因此它不适用于您的解决方案)。但是,这个循环将允许你的程序“运行”,直到你终止它正在运行的控制台。再次,如果你想使用它自己使用它,如果你不满足你的特定问题的要求包括while(true){}循环。

我希望这一切都有帮助

Mkreegs

答案 1 :(得分:0)

如果你绝对需要使用你描述的四个类,这是一个解决方案:

注意:避免循环的两种方法是:a)键入代码n次(如果有少量常量迭代),b)使用递归方法代替。

主:

  • 询问用户套数
  • 使用递归方法重复printSet()n次

SetCreator:

  • 实例化SeriesRoller
  • 对int []进行排序,并按照您所描述的格式进行格式化
  • getSet()返回String

SeriesRoller:

  • 实例化DieRoller
  • 使用递归方法滚动模具
  • getSeries()返回int []

DieRoller:

  • 实例化随机
  • getRoll()返回1到6之间的数字