Java - 数组:我如何找到大多数时间具有相似数字的数字?

时间:2013-11-30 01:54:37

标签: java arrays

我的任务之一出了问题。 我被要求构建一个用户将输入长度的数组。 最后,主要目标是打印任何数字频率最高的数字。 例如,如果数组的长度为4且数字为:1000,212,1345,88818 - 应该打印的数字是88818,因为它有更多相似的数字(数字8显示4次)。

我确信到目前为止我所拥有的一切都很好,但我发现该计划不完整有两个原因:

  1. 如果数组的大小大于2,则在创建数组后没有任何反应。
  2. 如果其中一个号码有多个数字,则没有任何反应。
  3. 我一直试图弄清楚现在5个小时的问题是什么,但仍然没有运气。 如果有人能帮助我,我将非常感激。

    只是要指出,我不允许使用非int []类型的数组,以及任何比数组更高级的材料。

    这是我到目前为止所做的:

        public static void frequentNumber() {
         int num=0;
        while (true) {
          System.out.println("Enter array size");
          num = in.nextInt();
          if (num >=1)
            break;
          }
        int[] a = createArray(num);
        int[] freq = new int[a.length]; //holds the frequency of each number in the primary array
        int count = 0, b;
        for (int i=0; i<a.length; i++) {
            b=a[i];
            while (b > 0) { // counts the number of digits 
                count++;
                b/=10;   }
            int[] k = new int[count]; // array of digits
            b=a[i];
            for (int j=0; j<k.length; j++) { // enters each digit into it's own box at the digits array
                k[j] = b % 10;
                b /= 10;   }
            int[] sortedK = new int[k.length];
            sortedK = sortArray(k); // sorts the array with bubble sort
            int max=0, maxNew=0;
            for (int s=1; s < sortedK.length; s++) {
                if (sortedK.length == 1) {
                    maxNew++;
                        break; }
                      else if (sortedK[s] != sortedK[s-1])
                    max=0;
                while (sortedK[s] == sortedK[s-1]) {
                    max++;
                    if (max > maxNew)
                        maxNew=max; 
                       }    
               }                           
            freq[i] = maxNew;     /* at this point, maxNew will have the amount of max frequent digits
                                       for the number at a[i]*/
        }                                   
        int maxIndex = checkMaxIndex(freq); // This Method returns an int that is the index of the highest frequency;
        printArray(a);
        System.out.println("The number with most freq digit is: " + a[maxIndex]);
    }
    

    非常感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

请将此视为一个指针,但我首先要计算一个整数中的数字!

/**
 * Take a decimal number as input, count the digits.
 * 
 * @param in
 *          A decimal number.
 * @return An array of 10 digit counts.
 */
public static int[] digitCounter(int in) {
  int[] ret = new int[10];
  String v = String.valueOf(in);
  for (char c : v.toCharArray()) {
    // You should probably use a 'switch' here.
    if (c == '0') {
      ret[0]++;
    } else if (c == '1') {
      ret[1]++;
    } else if (c == '2') {
      ret[2]++;
    } else if (c == '3') {
      ret[3]++;
    } else if (c == '4') {
      ret[4]++;
    } else if (c == '5') {
      ret[5]++;
    } else if (c == '6') {
      ret[6]++;
    } else if (c == '7') {
      ret[7]++;
    } else if (c == '8') {
      ret[8]++;
    } else if (c == '9') {
      ret[9]++;
    }
  }

  return ret;
}