java - 返回数字的输出没有达到预期?

标签 java arrays

Given an array of numbers as input, return the digit which occurs the maximum number of times in the input.

我不知道我正在创建的新数组的大小。我假设大小是两倍。为了分隔数字,我将数字除以模并添加到新数组中。之后我找到了最大数字在新数组中。但我没有得到预期的输出。

@Edit 根据提到的答案,我编辑了代码。现在出现的问题是我的数组 c 值没有被引用。(我的意思是我用数字分隔它们,但当我返回 q

Can anyone guide me what I am doing wrong?

 public int frequentDigit(int[] numbers)
 {
   int q=0;
   int c[]=seperateDigits(numbers);
   int p=findMax(c);
   for(int i=0;i<c.length;i++)
   {
    if(p==i)
    {
        //b1=true;
        q=numbers[i];
       break;
    }
   } 

   return q;

 }      

 int[] seperateDigits(int[] numbers) 
 {     
  int count=0;

  for (int i = 0; i < numbers.length; i++) 
  {
   int aNumber = numbers[i];
   if(aNumber==0)           //@Edit
   count++;
  else
  {
     while (aNumber > 0) 
    {
      int aDigit = aNumber % 10;
      System.out.println(aDigit);
       count++;


     aNumber = aNumber / 10;
    }
  }

 }
 int c[] = new int[count];

 for (int i = 0; i < numbers.length; i++) 
 {
  int aNumber = numbers[i];
  if(aNumber==0)           //@Edit
     c[i]=aNumber;
  else
  {
     while (aNumber > 0) 
    {
      int aDigit = aNumber % 10;
      //System.out.println(aDigit);
       //count++;
      c[i]=aDigit;             //@Edit
     //System.out.println(c[i]);  //@Edit

     aNumber = aNumber / 10;
    }
  }

 }
 return c;
}

    int findMax(int c[]) 
    {
        int max = c[0];
        int max_i = 0;
        for (int i = 1; i < c.length; i++)
        {
            if (c[i] > max) 
            {
                max = c[i];
                max_i = i;
            }
        }
        return max_i;
    }

输出

       Parameters          |  Actual Output  |  Expected Output
---------------------------|-----------------|-----------------
{24,27,30,31,34,37,40,42}  |     40          |        3

最佳答案

这是一个组合版本。它可以处理零值(计为单个 0 数字)和负值(符号被忽略)。空数组返回 -1,空数组抛出 NullPointerException

private static int findMostFrequentDigit(int ... input) {
    int[] digitCount = new int[10];
    for (int value : input)
        do {
            digitCount[Math.abs(value % 10)]++;
        } while ((value /= 10) != 0);
    int maxCount = 0, maxDigit = -1;
    for (int i = 0; i < 10; i++)
        if (digitCount[i] > maxCount) { // or >= to find the last max-digit
            maxCount = digitCount[i];
            maxDigit = i;
        }
//  printDebug(input, digitCount, maxCount);
    return maxDigit;
}

测试

System.out.println(findMostFrequentDigit(24,27,30,31,34,37,40,42));
System.out.println(findMostFrequentDigit(12345, 54321, 24, 159, 2468, 98765, 0, 1020304050));
System.out.println(findMostFrequentDigit(123, -654, 879));
System.out.println(findMostFrequentDigit(0));

输出

3
0
1
0
<小时/>

为了获得良好的调试输出,请使用此方法并取消注释上面的 printDebug() 行:

private static void printDebug(int[] input, int[] digitCount, int maxCount) {
    System.out.println(Arrays.toString(input));
    String format = "%" + (Integer.toString(maxCount).length() + 1) + "d";
    System.out.print("  Digit:");
    for (int i = 0; i < 10; i++)
        System.out.printf(format, i);
    System.out.println();
    System.out.print("  Count:");
    for (int i = 0; i < 10; i++)
        System.out.printf(format, digitCount[i]);
    System.out.println();
    format = "%" + (Integer.toString(maxCount).length() + 1) + "s";
    System.out.print("  Max:  ");
    for (int i = 0; i < 10; i++)
        System.out.printf(format, digitCount[i] == maxCount ? "^" : "");
    System.out.println();
}

输出

[24, 27, 30, 31, 34, 37, 40, 42]
  Digit: 0 1 2 3 4 5 6 7 8 9
  Count: 2 1 3 4 4 0 0 2 0 0
  Max:         ^ ^          
[12345, 54321, 24, 159, 2468, 98765, 0, 1020304050]
  Digit: 0 1 2 3 4 5 6 7 8 9
  Count: 6 4 5 3 5 5 2 1 2 2
  Max:   ^                  
[123, -654, 879]
  Digit: 0 1 2 3 4 5 6 7 8 9
  Count: 0 1 1 1 1 1 1 1 1 1
  Max:     ^ ^ ^ ^ ^ ^ ^ ^ ^
[0]
  Digit: 0 1 2 3 4 5 6 7 8 9
  Count: 1 0 0 0 0 0 0 0 0 0
  Max:   ^                  

关于java - 返回数字的输出没有达到预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094296/

相关文章:

java - EasyMock "expected"调用次数大于 "times"方法中设置的值

返回一个数组的 Javascript 函数,该数组包含小于最大值的 7 的倍数

php - 作为 JSON 响应的多维数组

Javascript 按交集对数组进行分组

javascript - 理解 javascript 中的 for 循环

java - Servlet异常: No adapter for handler just for one service

java - Kotlin:扩展动态给定的父类(super class)型

java - 如何处理 LocalDate period. Between 结果?

java - 尝试最佳解决方案?

java - Arrays.asList(an_array).contains(an_integer) 总是 false。为什么?