2015-08-24 39 views
1

/*我是編程的初學者。作爲任務的一部分,我必須在數字字符串中找到最頻繁的數字。雖然我的代碼被編譯,但它不會給我正確的結果。請幫助我有了這個。 */如何查找數字字符串中最頻繁的數字?

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; 
    } 
    } 

//這個類被另一個主class.I叫我寫它的代碼了。

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); 
     } 
    } 
    } 
    } 
+2

你得到什麼結果,而且你能指望什麼?哪個數字失敗?你用調試器完成了它嗎?順便說一句,我強烈建議重新格式化您的代碼以使其更易於閱讀。 (你的主代碼也可以簡單得多,但在簡化它之前,應該先了解一下當前的失敗。) –

+0

如果你替換switch-case中的'48,49,50'等,你可以使你的代碼更具可讀性用'0','1','2'等。並遵守Java命名約定http://www.oracle.com/technetwork/java/codeconventions-135099.html,例如類應該以大寫字母 – hinneLinks

回答

2

你可以做的只是使用一個簡單的數組。

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)"); 

程序中的錯誤是你沒有考慮重複多次的數字,你只考慮了次數。因此你只能得到頻率而不是數字。

+0

thanq開頭。我剛剛得到了我的錯誤 –

0

就像是在評論說,該代碼可以變得更簡單(更易讀) 然而,回答你的問題是這樣的:返回值(臨時)是最常見的頻率數字,而不是數字本身(這是j,你必須「記住」它)

0

這裏是更具可讀性和簡單的代碼:

  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); 
       } 

      } 
相關問題