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

我的龙与地下城骰子滚轮出问题了

姬博瀚
2023-03-14
import java.util.Scanner;

public class Project2Main {

public static void main(String[] args) {

    Scanner kb = new Scanner(System.in);
    int numberOfSets = 0;
    System.out.println("How many sets of dice would you like to roll?");
    numberOfSets = kb.nextInt();
    kb.nextLine();

    for (int i = 0; i < numberOfSets; i++) {
        int dice1 = 0;
        int dice2 = 0;
        int dice3 = 0;
        int dice4 = 0;
        int diceTotal = 0;

        if (dice1 < dice2 && dice1 < dice3 && dice1 < dice4) {
            diceTotal = dice2 + dice3 + dice4;
            System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice1 + ".");
            break;
        } else if (dice2 < dice1 && dice2 < dice3 && dice2 < dice4) {
            diceTotal = dice1 + dice3 + dice4;
            System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice2 + ".");
            break;
        } else if (dice3 < dice1 && dice3 < dice2 && dice3 < dice4) {
            diceTotal = dice1 + dice2 + dice4;
            System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice3 + ".");
            break;
        } else if (dice4 < dice1 && dice4 < dice2 && dice4 < dice3) {
            diceTotal = dice1 + dice2 + dice3;
            System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice4 + ".");
            break;
        }
    }
    kb.close();
}

这是我的主要课程。重点是拿四个不同的六面模具卷,检查哪个卷是最低的,然后把三个最高的卷加在一起,同时告诉用户他们的最低卷是多少。

我遇到的主要问题是制作骰子课。

我知道我需要一个int来保存dice值,一个构造函数来实际创建随机整数,一个getter来实际将随机整数返回到主类。我该怎么做呢?

另一个问题:我如何让用户选择一个集合,然后重新滚动该集合中的最小值?我的意思是,当用户掷骰子时,三个最大的骰子被加在一起,而最低的骰子则被放到一边。即使用户不想重新掷骰子,也必须强制用户重新掷三个最高骰子中的最低值。

用户必须能够输入一个数字,指示哪个集合最终将被重新滚动。

如果这没有什么意义,我很抱歉,所以如果有人想建议编辑以使这更清楚,那就太好了。

共有1个答案

华懿轩
2023-03-14

自定义双滚动器类,能够滚动任意数量的4d 6-drop-lower集合。

import java.util.*;

public class DiceRoller
{
    private Random rand;

    public DiceRoller()
    {
        this.rand = new Random();
    }

    public int rollSingleDie()
    {
        return rand.nextInt(6)+1;
    }

    public List<Integer> roll4d6DropLowest()
    {
        List<Integer> retList = new ArrayList<Integer>();

        // Add 4 numbers to the list to simulate 4 rolls.
        for (int i=0; i<4; i++)
        {
            retList.add(rollSingleDie());
        }

        // Remove the lowest roll of the 4. 
        retList.remove(Collections.min(retList));

        return retList;
    }

    public List<List<Integer>> rollSets(int numSets)
    {
        List<List<Integer>> results = new List<List<Integer>>();
        for (int i=0; i<numSets; i++)
        {
            results.add(roll4d6DropLowest());
        }
        return results;
    }
}

在您的主要方法中:

public static void main(String args[])
{
    /*** Rolling the initial sets ***/
    int numSets = 10; // Ten is a placeholder.
                      // This is where you get input from user.

    DiceRoller roller = new DiceRoller();
    List<List<Integer>> diceSets = roller.rollSets(numSets);

    for (List<Integer> diceRolls : diceSets)
    {
        Integer total = sum(diceRolls);
        Integer lowest = Collections.min(diceRolls);
        System.out.println("Total is : " + total + " and lowest is : " + lowest);
    }

    /*** Forcing user to reroll lowest of one set ***/
    int setToRerollIndex = 1; // Placeholder value.
    // Replace with input from user on which set to reroll.
    // Remember to adjust user input - they will probably use a number between 1 
    // and the number of sets, but the List needs an index between 0 and the number of
    // sets - 1. 
    List<Integer> setToReroll = diceSets.get(setToRerollIndex);
    int indexOfLowest = setToReroll.indexOf(Collections.min(setToReroll));
    setToReroll.set(indexOfLowest, roller.rollSingleDie());

    // Selected set has now rerolled the lowest value.
}

public static int sum(List<Integer> list)
{
    int sum= 0; 
    for (int number : list)
        sum = sum + number;
    return sum;
}
 类似资料:
  • 我的任务是创建一个龙与地下城骰子滚动程序,其中四个骰子滚动,最高的三个数字被记录下来,最低的数字被放到一边。 该程序需要使用面向对象编程,这就是我遇到问题的地方。 此外,不能使用嵌套的If语句或循环。 我试图找出如何将每个类彼此分开编码。 我需要一个将运行程序本身的类,一个询问使用程序的人他们想要掷多少组骰子的类,一个实际表示掷骰子集的类,一个表示掷骰子系列的类(这是显示骰子1掷出的骰子,掷出的骰

  • 你好堆栈溢出,我有一个小问题与这个程序。我正在尝试制作一个程序来掷四个骰子并将三个最高的掷骰子加在一起,然后打印这三个掷骰子中最低的一个。我犯了一个错误,就是把三个最高的卷子加在一起,然后打印出四个卷子中最低的一个。 我如何解决这个问题?我在谷歌上搜索了很多,想知道如何使用列表和集合,但我找不到任何可以解决这个问题的东西。 此外,我如何才能迫使用户选择一个集合并重新滚动该集合? 基本上,我想做的是

  • 我正试图用python做一个掷骰子程序,给定用户在边、骰子和掷骰子上的输入来掷骰子。目前这段代码或多或少是有效的,但是我遇到的问题是,假设我让< code>3个骰子滚动< code>3次,骰子有< code>6个面。 我的代码显示如下: 当我需要它显示为: 这是我目前为止的代码。我的猜测是,它与我的参数和参数为空有关?我不完全确定。以下是我的代码:

  • 我对java非常陌生,我为自己设定了一个目标,即制作一个掷骰子程序(保持小)。最终目标是能够掷出用户选择的骰子量,并能够让每个骰子具有不同数量的面(如果需要),我让它获得骰子的数量和每个骰子的面数。这是我为它做的代码(可能真的很糟糕,如果是的话,很抱歉): 现在我想显示< code>ArrayList,但我想将其显示为 "骰子1掷出# 掷骰子2 # " 等等,我迷失了如何做到这一点,特别是对于不同

  • 代码的目的是让两个玩家掷一对骰子。第一个掷出20分的玩家赢得比赛。我很难弄清楚如何正确地跟踪滚动的总和;它只给我当前回合的总和,然后当每个玩家滚动10次时游戏就结束了。 我如何正确地计算每个玩家游戏的总和,然后当其中一个玩家的总和等于20时停止循环?

  • 我们有一项任务来决定骰子游戏的最终赢家。以下是完整的规则: 在这个游戏中,你将与另外两个电脑玩家对决。有三轮。每轮开始时,一个玩家掷两个骰子。你那一轮掷骰子的总数加在你的点数上。你的积分总是从零开始。每连续一轮,积分加到总数上。第三轮结束时,谁的积分最多,谁就赢得比赛。 回溯(最近的调用):2:from rollem 2.rb:83:in'1:from rollem 2.rb:79:in play