有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在数字字符串中查找最频繁的数字?

/*我是编程新手。作为作业的一部分,我必须找到数字字符串中最常见的数字。虽然我的代码被编译了,但它并没有给出正确的结果。请帮我做这个。 */

    import java.util.*;

    public class program
    {
    public int test(String number)
    {
    int freq0,freq1,freq2,freq3,freq4,freq5,freq6,freq7,freq8,freq9;
    freq0=0;
    freq1=0;
    freq2=0;
    freq3=0;
    freq4=0;
    freq5=0;
    freq6=0;
    freq7=0;
    freq8=0;
    freq9=0;
    for (int i =0; i<number.length();i++)
    {
        switch (number.charAt(i))
        {
            case 48: freq0++;
            break;
            case 49: freq1++;
            break;
            case 50: freq2++;
            break;
            case 51: freq3++;
            break;
            case 52: freq4++;
            break;
            case 53: freq5++;
            break;
            case 54: freq6++;
            break;
            case 55: freq7++;
            break;
            case 56: freq8++;
            break;
            case 57: freq9++;
            break;
        }
    }
    List<Integer> hope = new ArrayList<Integer>();

    hope.add(freq0);
    hope.add(freq1);
    hope.add(freq2);
    hope.add(freq3);
    hope.add(freq4);
    hope.add(freq5);
    hope.add(freq6);
    hope.add(freq7);
    hope.add(freq8);
    hope.add(freq9);

    int temp=0;
    for (int j=0; j<(hope.size());j++)
    {
        if (temp<hope.get(j))
        {
            temp=hope.get(j);
        }
    }

    return temp;
    }
    }

//该类由另一个主类调用。我也在写代码

    public class checker
    {
    public static void main ( String args [])
    {
    int inputs[] = {1234, 11, 144, 97764 };
    int outputs[] = {1, 1, 4, 7};

    for(int i=0; i<inputs.length; i++) {
        int input=inputs[i];
        int oracle_output=outputs[i];

        program p = new program();

        String input_string = "" + input;
        int output = p.test(input_string);
        if(output==oracle_output) {
            System.out.println("test passed for " + input);
        } else {
            System.out.println("test failed for " + input);
        }
    }
    }
    }

共 (3) 个答案

  1. # 1 楼答案

    您所能做的就是使用一个简单的数组

    long number = 12345612;
    int []frequency = new int[10];
    while(number > 0)
    {
     int digit = number % 10;
     number /= 10;
     frequency[digit] ++;
    }
    
    for(int i = 0; i < 10; ++i)
     System.out.println(frequency[i]);
    

    如果它是一个String

    String str = "12342352397235823050237238523";
    int []frequency = new int[10];
    for(int i = 0; i < str.length(); ++i)
    {
     int digit = str.charAt(i) - '0';
     frequency[digit] ++;
    }
    for(int i = 0; i < 10; ++i)
     System.out.println(frequency[i]);
    

    以获取最大占用位数

    int maxFrequency = 0;
    int index = 0;
    for(int i = 0; i < 10; ++i){
       if(frequency[i] > maxFrequency){
         maxFrequency = frequency[i];
         index = i;
        }
      }
    System.out.println("The highest occuring digit is " + index + " occuring " + maxFrequency + " times(s)");
    

    你程序中的错误是你没有考虑重复多次的数字,你只考虑了重复的次数。因此,你只得到频率,而不是数字

  2. # 2 楼答案

    以下是可读性更强、更简单的代码:

                import java.util.ArrayList;
                import java.util.List;
    
                public class MostFrequentDigits1 {
    
                    /**
                     * @param args
                     */
                    public static void main(String[] args) {
                        // TODO Auto-generated method stub
    
                        long number = 12345612;
                        String str = "12342352397235823050237238523";
                        getMostFrequentDigitWInNumber(number);
                        getMostFrequentDigitInString(str);
    
                    }
    
                    public static void getMostFrequentDigitWInNumber(long number) {
                        List<Integer> list = new ArrayList<Integer>();
                        int[] frequency = new int[10];
                        int mostFrequentVal = 0;
                        while (number > 0) {
                            int digit = (int) (number % 10);
                            number /= 10;
                            frequency[digit]++;
                            if (frequency[digit] > mostFrequentVal) {
                                mostFrequentVal = frequency[digit];
                            }
                        }
    
                        for (int j = 0; j < frequency.length; j++) {
                            if (frequency[j] == mostFrequentVal) {
                                list.add(j);
                            }
                        }
                        System.out.println("most frequent digits in Number:" + list);
                    }
    
                    public static void getMostFrequentDigitInString(String str) {
                        List<Integer> list = new ArrayList<Integer>();
                        int mostFrequentVal = 0;
                        int[] frequency = new int[10];
                        for (int k = 0; k < str.length(); k++) {
                            char c = str.charAt(k);
                            int ind = Integer.valueOf(String.valueOf(c));
                            frequency[ind]++;
                            if (frequency[ind] > mostFrequentVal) {
                                mostFrequentVal = frequency[ind];
                            }
                        }
    
                        for (int j = 0; j < frequency.length; j++) {
                            if (frequency[j] == mostFrequentVal) {
    
                                list.add(j);
                            }
                        }
                        System.out.println("most frequent digits in string:" + list);
                    }
    
                }
    
  3. # 3 楼答案

    正如注释中所说,代码可以变得更简单(更可读) 但是,您的问题的答案是:返回值(temp)是最频繁数字的频率,而不是数字本身(即j,您需要“记住”它)