Necesito ayuda con este problema:
Escriba un método mostFrequentDigit que devuelva el valor del dígito que ocurre con mayor frecuencia en un número. Ejemplo: el número 669260267 contiene: un 0, dos 2, cuatro 6, un 7 y un 9. mostFrequentDigit(669260267) devuelve 6. Si hay un empate, devuelve el dígito con el valor más bajo. mostFrequentDigit(57135203) devuelve 3.
Este es el código que tengo ahora, pero no funciona:
public static int mostFrequentDigit(int num) { int largestCount = 0; int currentCount = 0; String num0 = Integer.toString(num) String mostFrequent = num0.substring(0,1); for (int x = 0; x < num0.length(); x++) { if (num0.substring(x,x+1).equals(mostFrequent)) { currentCount++; } if (currentCount > largestCount) { largestCount = currentCount; mostFrequent = num0.substring(x,x+1); } } return mostFrequent; }Vas a tener que realizar un seguimiento de los recuentos de todos los dígitos (por ejemplo, en una matriz o Map ) y obtener el resultado después de contar todos los dígitos.
Aquí hay un enfoque usando una matriz:
public class MyClass { public static int mostFrequentDigit(int num) { int n = Math.abs(num); int digit = 0; int max = 0; int[] counts = new int[10]; while (n != 0) { counts[n % 10]++; n /= 10; } for (int i = 0; i < counts.length; i++) { if (counts[i] > max) { digit = i; max = counts[i]; } } return digit; } public static void main(String args[]) { System.out.println(mostFrequentDigit(57135203)); } }Este fragmento utiliza una combinación de operaciones de división de módulos y enteros para obtener los dígitos separados, y para cada dígito incrementa el contador correspondiente en una matriz. Después de contar todo, atraviesa la matriz para encontrar el dígito con el contador más alto.
Hay algunos errores lógicos en su código. Proporcione un código simple y corto para hacer esto como se muestra a continuación.
import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; public static int mostFrequentDigit(int num) { Map<String, Integer> map = new HashMap<String, Integer>(); for (int i = 0; i < 10; i++) { String digit = String.valueOf(i); map.put(digit, StringUtils.countMatches(String.valueOf(num), digit)); } Comparator<Map.Entry<String, Integer>> byValue = Map.Entry.comparingByValue(); Map.Entry<String, Integer> maxEntry = Collections.max(map.entrySet(), byValue); return Integer.parseInt(maxEntry.getKey()); }Parece un problema de asignación escolar. Tu maestro definitivamente quiere que aprendas recursividad.
Por lo tanto, recopile datos en una matriz de tamaño 10 (si está calculando para la base 10, puede hacer lo mismo para la base 16, por ejemplo)
Escribe una función recursiva (función que se llama a sí misma mientras sea necesario) que toma el último dígito de un número (módulo 10 en el caso de dígitos decimales) y pasa los restos del número (dividido por 10, pero como un número entero) a la siguiente invocación de sí mismo (en caso de que sea mayor que 0)
Después de que finaliza su recursividad, tiene una matriz con recuentos de dígitos. Simplemente procéselo con for loop y encuentre el índice con el valor máximo