【问题标题】:Multiples of an element in a Java ArrayJava数组中元素的倍数
【发布时间】:2013-11-09 09:51:50
【问题描述】:

我有一个关于数组的非常笼统的问题。这是我必须为家庭作业做的掷骰子游戏。

我有一个长度为 7 的数组,其中包含整数,这些整数是我的各种掷骰子方法的结果,我需要找出该数组是否包含一个元素的多个实例、该元素是什么以及它出现了多少次.作为 Java 新手,我什至不知道在哪里寻找可以执行此类操作的方法。有谁知道我在哪里可以找到一个,或者更好的是有关于如何自己写一个的提示?

在概念上对我来说最难的部分之一是我不知道我会得到多少结果,因为最多可能有两对和三对。 IE int[] roll = { 3, 3, 4, 4, 5, 5, 5 }。我认为解决它的最好方法是使用循环,直到我的多重查找方法失败,每次都删除匹配的元素。

非常感谢您的帮助,这将在午夜截止!

【问题讨论】:

  • 这取决于,结果是否总是排序的?
  • @MadProgrammer 请尽可能正确拼写“it”。
  • 您滚动的是单个 6 面骰子还是一对 6 面骰子? (结果会是 1-6 还是 2-12?)
  • @tbodt 我不知道,我依赖很多东西 ;)
  • 改用地图,键是骰子,值是出现次数。

标签: java arrays loops duplicates


【解决方案1】:

通常的方法是使用Map 来累积频率:

int[] roll = { 3, 3, 4, 4, 5, 5, 5 };

Map<Integer, Integer> counts = new HashMap<>(roll.length);

for (int a : roll)
    counts.put(a, counts.containsKey(a) ? counts.get(a) + 1 : 1);

for (Entry<?, Integer> e : counts.entrySet())
    if (e.getValue() > 1)
        System.out.println(e.getKey() + "\t" + e.getValue());
3 2 4 2 5 3

第一列是掷骰子,第二列是频率。

【讨论】:

  • 这看起来很棒,谢谢。有没有办法访问地图中的数字?如,将输出分配给以后使用的变量?
  • @user2812871 你可以使用counts.get(n)来获取号码n的频率。另外,如果这个答案对你有帮助,你可以考虑accepting it
【解决方案2】:

您不应该为此使用数组。最好使用Map&lt;Integer, Integer&gt;。键是数字,值是出现的次数。以下是跟踪数字的示例代码:

Map<Integer, Integer> numbers = new Map<Integer, Integer>();
public void addNumber(int n) {
    if (numbers.get(n) == null)
        numbers.set(n, 0);
    int count = numbers.get(n);
    numbers.set(n, count + 1);
}

public int countForNumber(int n) {
    if (numbers.get(n) == null)
        return 0;
    return numbers.get(n);
}

【讨论】:

    【解决方案3】:
    int[7] rollCounts = {0};
    for(int i=0; i<roll.length; ++i)
        rollCounts[roll[i]]++;
    

    使用此方法,rollCounts[1] 将包含 1roll[] 中的出现次数,rollCounts[2] 将包含 2roll[] 中的出现次数等。(rollCounts[0] 应该永远是0,假设roll[i]从不包含0,这是不应该的)。

    然后您可以使用一些逻辑在不同的for 循环中检查rollCounts[i],以根据出现次数执行您需要执行的任何操作。

    老实说,您可以将掷骰子存储在这个数组中,除非跟踪掷骰子的顺序很重要。

    【讨论】:

      【解决方案4】:
      int[] arr = { 2, 2, 4, 4, 4, 6, 6, 6, 6 };  // Can have any length.
      Map<Integer, Integer> elemCount = new HashMap<Integer, Integer>();
      Integer count = 0;
      for ( int element : arr )
      {
          count = elemCount.get ( (Integer) element );
          if ( count == null )
          {
              count = 1;
          }
          else 
          {
              count++;
          }
          elemCount.put ( (Integer) element , (Integer) count );
      }
      System.out.println ( elemCount.toString() );
      

      【讨论】:

        猜你喜欢
        • 2020-02-04
        • 2012-09-22
        • 1970-01-01
        • 2022-01-25
        • 2011-11-12
        • 2021-06-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多