如何计算数组中15个数字的出现次数?

时间:2015-03-13 00:07:57

标签: java arrays java.util.scanner

我是编写代码的新手。我需要制作一个程序,将15个数字读入0到50之间的数组,然后打印出现。这是我到目前为止所做的。

import java.util.Scanner;
public class Occurrence
{
   public static void main(String[] args)
  {
      Scanner scan = new Scanner(System.in);
      int [] nmberchck = new nmberchck[50];
      int[] numbs = new int[15];
      System.out.println("Enter 15 numbers that are between 0 and 50 ");
      System.out.println();
      numbs[0] = scan.nextInt();
      numbs[1] = scan.nextInt();
      numbs[2] = scan.nextInt();
      numbs[3] = scan.nextInt();
      numbs[4] = scan.nextInt();
      numbs[5] = scan.nextInt();
      numbs[6] = scan.nextInt();
      numbs[7] = scan.nextInt();
      numbs[8] = scan.nextInt();
      numbs[9] = scan.nextInt();
      numbs[10] = scan.nextInt();
      numbs[11] = scan.nextInt();
      numbs[12] = scan.nextInt();
      numbs[13] = scan.nextInt();
      numbs[14] = scan.nextInt();
      for (int nmb = 0; nmb < numbs.length; nmb++)

谢谢

2 个答案:

答案 0 :(得分:1)

更简单的版本:

public static void main(String[] args) {
        int[] nmberchck = new int[51];
        int[] numbs = new int[15];
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 15 numbers that are between 0 and 50 ");
        System.out.println();
        for (int i = 0; i < 15; i++) {
            numbs[i] = sc.nextInt();
        }
        for (int i = 0; i < 15; i++) {
            if (!(numbs[i] < 0 || numbs[i] > 50))
                nmberchck[numbs[i]]++;
        }

        for (int i = 0; i < nmberchck.length; i++)
            if (nmberchck[i] > 0)
                System.out.println(i + " occured " + nmberchck[i]
                        + " times");
    }

更有趣的版本:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    HashMap<Integer, Integer> x = new HashMap<Integer, Integer>();
    ArrayList<Integer> m = new ArrayList<Integer>();
    for (int i = 0; i < 15; i++) {
        int tmp = sc.nextInt();
        if (!x.containsKey(tmp))
            x.put(tmp, 1);
        else
            x.put(tmp, x.get(tmp) + 1);
        if (!m.contains(tmp))
            m.add(tmp);
    }

    for (int i = 0; i < m.size(); i++)
        System.out.println(m.get(i) + " occured " + x.get(m.get(i)) + " times");

}

这将打印出每个数字按递增顺序出现的次数。希望这会有所帮助。

答案 1 :(得分:0)

所以你必须打印输入的每个数字的出现次数吗?

我不知道你老师的想法,但你已经有一个叫做nmberchck的50个数组。您可以使用此数组来计算每个数字的出现次数,因为数字介于0和50之间。实际上,如果您包含数字0和50,则实际上需要51的数组。

首先,每个数字出现0次。因此,最初需要将nmberchck中的每个元素设置为0.您可以使用循环来执行此操作。

接下来,您必须接受15个数字作为输入,并使用nmberchck计算每个数字。因为你做了15次同样的事情,所以请使用循环。

所以有两个循环,一个用于初始化,一个用数字读取并计算它。

这两个循环是否嵌套?要回答这个问题,请了解您正在做多少次重复。 首先将nmberchck元素初始化为0:51重复。 然后得到输入:15次重复。 总计:66次重复。

当重复添加像这样时,这是一个循环跟随另一个循环。

嵌套循环是另一个循环,在这种情况下重复繁殖。

接下来要做的就是打印出结果。由于nmberchck包含您的结果,您将再次遍历它。

当您尝试编写代码时,请将解决问题的方法分解为简单的步骤。尝试量化并理解你自己如何解决它。你会如何手工解决这个问题?在理解之前,你不能编写代码。

BTW,这不是解决这个问题的最有效方法,但它是对数组,循环和索引的一个很好的介绍。大多数的nmberchck元素都不会被使用,因为你只输入了15个数字 - nmberchck是一个人口稀少的数组。