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

龙与地下城掷骰子再掷

卢永寿
2023-03-14
import java.util.*;

public class Project2Main {

public static void main(String args[]) {
    Scanner kb = new Scanner(System.in);
    int numSets = 0;
    System.out.println("How many sets of dice would you like to roll?");
    numSets = kb.nextInt();
    kb.nextLine();

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

    for (List<Integer> diceRolls : diceSets) {
        Integer total = sum(diceRolls);
        Integer lowest = Collections.min(diceRolls);
        System.out.println("Your roll total is: " + total + " and the lowest roll was a: " + lowest);
    }
    kb.close();
}

public static int sum(List<Integer> list) {
    int sum = 0;
    for (int number : list)
        sum = sum + number;
    return sum;
}
}

import java.util.*;

public class RollingDice {
private Random rand;

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

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

    for (int i = 0; i < 4; i++) {
        retList.add(rand.nextInt(6) + 1);
    }

    retList.remove(Collections.min(retList));

    return retList;
}

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

你好堆栈溢出,我有一个小问题与这个程序。我正在尝试制作一个程序来掷四个骰子并将三个最高的掷骰子加在一起,然后打印这三个掷骰子中最低的一个。我犯了一个错误,就是把三个最高的卷子加在一起,然后打印出四个卷子中最低的一个。

我如何解决这个问题?我在谷歌上搜索了很多,想知道如何使用列表和集合,但我找不到任何可以解决这个问题的东西。

此外,我如何才能迫使用户选择一个集合并重新滚动该集合

基本上,我想做的是将每个集合分配给一个数字(集合1是1,集合2是2,依此类推),然后用户输入一个与他们拥有的集数量相关的数字,然后重新滚动三个最高卷中的最低卷。

任何帮助都非常感谢。

共有1个答案

习华灿
2023-03-14

在这里使用列表列表是一个轻微的过度轰炸案例,这个怎么样:

public class Project2Main {
    private static Random rand = new Random(System.currentTimeMillis());

    public static void main(String args[]) {
        int numSets = 4; //set via Scanner, if wanted

        List<Integer> dices = new ArrayList<Integer>(numSets);
        for (int c = 0; c < numSets; c++) {
            int roll = rand.nextInt(6) + 1;
            dices.add(Integer.valueOf(roll));
            System.out.println(roll);
        }

        int[] pair = roll4d6DropLowest(dices);
        System.out.println("lowest of three highest: " + pair[0]);
        System.out.println("sum of 3 highest is: " + pair[1]);    
    }


    /**@param diceRolls Array of dice rolls
     * @return return array of two ints: 
           0: lowest of three highest
           1: sum of three highest */
    private static int[] rollXd6DropLowest(List<Integer> array) {
        int sum = 0;
        int low = 0;

        Collections.sort(array);
        for (int c = (array.size() - 1); c > 0; c--) {
            sum += (int) array.get(c);
            if (c == 1) {
                low = (int) array.get(c);
            }
        }

        int[] pair = { low, sum };
        return pair;
    }

}

我承认,返回int[]并不是所有解决方案中最好的,但对于那一小段代码来说,它应该没问题。

请注意按当前时间毫秒初始化Random以确保随机性。

诀窍是将掷骰子存储在< code >整数的< code >列表中,并在< code >集合的帮助下根据它们的“自然顺序”对它们进行排序。最高是最高的。

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

  • 这是我的主要课程。重点是拿四个不同的六面模具卷,检查哪个卷是最低的,然后把三个最高的卷加在一起,同时告诉用户他们的最低卷是多少。 我遇到的主要问题是制作骰子课。 我知道我需要一个int来保存dice值,一个构造函数来实际创建随机整数,一个getter来实际将随机整数返回到主类。我该怎么做呢? 另一个问题:我如何让用户选择一个集合,然后重新滚动该集合中的最小值?我的意思是,当用户掷骰子时,三个最大的

  • 我正在用java创建一个掷骰子的应用程序。我有一个掷骰子的“骰子”类,和一个使用“骰子”的多个实例变量的“骰子”类。但是,它只为我的值返回0。骰子类本身可以工作,并且会掷出一个随机数,但是我不知道如何在我的“骰子”类中得到多个掷骰子。感谢任何帮助。 骰子类 模具等级

  • 我试图为一个游戏的掷骰子程序,其中用户输入一个下注金额和2个六面骰子滚动,如果7或11是滚动,他们赢了。如果掷2,3或12就输了,如果掷其他任何一个数字,它就显示该数字为一个点。它会继续掷骰子,直到掷7或该点为止,如果掷7就输了,否则就赢了。出于某种原因,在掷骰子时,他会掷骰子,然后再掷一次,看看他们是否赢了或输了。我不知道如何解决这个问题,任何帮助都不会附带

  • 我是一个C++初学者,我需要创建一个骰子游戏模拟掷两个骰子。我对头文件的使用感到很困惑。但首先,为什么我需要返回骰子的票面号码?其次,int roll函数做什么?来重置价值观和面孔?如果是,默认值是多少?而最后一个函数骰子(int n),我是否使用这个函数来控制骰子值的最大总和?函数必须有一个具有以下函数的类头文件: