【问题标题】:Count how many integers were displayed in an array计算数组中显示了多少个整数
【发布时间】:2016-06-22 09:20:52
【问题描述】:

我有一个 100 个随机元素的数组,每个元素都在 0-10 的范围内,我需要计算每个整数输入了多少次(例如 1、2、2、3、8、8、4。 ..)

输出:

1 - 1

2 - 2

3 - 1

8 - 2

4 - 1

到目前为止我的代码是:

import java.util.Random;

public class Asses1 {
    public static void main(String[] args) {

        getNumbers();
      }

    private static int randInt() {
        int max = 10;
        int min = 0;

        Random rand = new Random();

        int randomNum = rand.nextInt((max - min) + 1) + min;
        return randomNum;
    }

    public static int[] getNumbers() {
        int number = 100;
        int[] array = new int[number];
        for (int i = 0; i < array.length; i++) {
            System.out.println(randInt());
        }

        System.out.println(number+" random numbers were displayed");
        return array;
    }

}

【问题讨论】:

  • 这里可能有一些有用的东西:stackoverflow.com/questions/8098601/…
  • 提示:您的方法 getNumbers() ... 仅返回 0。只是 printing 到控制台并不会神奇地将数字放入数组中。并提示:从小处着手。最初不要输入 100 个条目。只需 5 或 10 个。首先让您的代码工作,然后再使用更大的数据集!
  • @Jägermeister 似乎 op 不知道 cmets 和答案,他被告知他的 getNumbers 只返回零,但他仍然在正确答案下抱怨“如果我这样做,输出将是:每个元素为 0 (例如 0 - 100; 1 - 0 , 2 - 0, 3 - 0 等)”

标签: java arrays count element


【解决方案1】:

添加这个方法,它会做计数:

public static void count(int[] x) {
    int[] c=new int[11];

    for(int i=0; i<x.length; i++)
        c[x[i]]++;

    for(int i=0; i<c.length; i++)
        System.out.println(i+" - "+c[i]);
}

把main改成这个,这样你就可以调用之前的方法了:

public static void main(String[] args) {

    count(getNumbers());
  }

另外,将getNumbers 中的for 循环更改为此,以便用生成的数字填充array,而不仅仅是打印它们:

    for (int i = 0; i < array.length; i++) {
        array[i] = randInt();
        System.out.println(array[i]);
    }

【讨论】:

  • 如果我这样做,输出将为:每个元素为 0(例如 0 - 100;1 - 0、2 - 0、3 - 0 等)
  • 这是因为你没有在getNumbers的循环中做最后的修改。这样做并检查正确性。从getNumbers 返回的数组全为零,所以结果是逻辑。
【解决方案2】:

这是如何在 java 8 中完成的

// Retrieve the random generated numbers
int[] numbers = getNumbers();
// Create an array of counters of size 11 as your values go from 0 to 10
// which means 11 different possible values.
int[] counters = new int[11];
// Iterate over the generated numbers and for each number increment 
// the counter that matches with the number
Arrays.stream(numbers).forEach(value -> counters[value]++);
// Print the content of my array of counters
System.out.println(Arrays.toString(counters));

输出:

[12, 11, 7, 6, 9, 12, 8, 8, 10, 9, 8]

注意:您的方法getNumbers 不正确,您应该像下一步一样修复它:

public static int[] getNumbers() {
    int number = 100;
    int[] array = new int[number];
    for (int i = 0; i < array.length; i++) {
        array[i] = randInt();
    }

    System.out.println(number+" random numbers were displayed");
    return array;
}

【讨论】:

  • 他甚至不明白他必须将值存储在他的数组中(因为他刚刚打印了它们)。而且你认为他有任何机会理解这段代码,没有任何解释。嗯,我不会这么说。
【解决方案3】:
int[] array2 = new int[11];

for (int i = 0; i < array.length; i++){
    array2[randInt()]++
}
for (int i = 0; i < array.length; i++)
    System.out.println(String.valueOf(i) + " - " + String.valueOf(array2[i]));

我所做的是:

  1. 创建一个帮助数组array2,用于存储每个数字的出现次数。
  2. 生成数字时,帮助数组中的出现次数递增。

【讨论】:

  • 尽管人们一直在支持你:你永远应该只给出代码答案。你也总是解释发生了什么。
  • @xenteros 第一个循环是不必要的,数组初始化为零。在第二个循环中,您修改 array 而不是 array2
  • @xenteros 好的,但实际上您没有将数字存储在 array 中。如何打印它们?
  • Easili - for(int i = 0; i
  • @xenteros 您上一条评论中的for 循环是从0 到10,而您打印array[i]? array 的大小为 100。此外,在您的代码中,您不会在 array 中存储任何内容。您只需使用randInt() 的结果即可。
【解决方案4】:
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        int temp;
        for (int i = 0; i < array.length; i++) {
            temp=randInt();
            if(map.containsKey(temp)){
                map.put(temp, map.get(temp)+1);
            }else{
                map.put(temp, 1);
            }
        }

【讨论】:

  • 请注意:好的答案总是带有解释;不仅仅是代码。尤其是当您与新手交谈时;你真的不能指望他仅仅通过阅读代码就能“得到东西”。
猜你喜欢
  • 2021-12-04
  • 2021-05-12
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多