2017-03-17 51 views
0

幫我找到這段代碼中的錯誤,我不明白爲什麼它不起作用。我想顯示數組中的所有唯一數字,以及它們的頻率(它們發生的次數)。查找數組中不同數字的方法及其頻率

package myProj; 

import java.util.Scanner; 

public class Freq { 

    static boolean isRepeated(int[] temp,int zz){ 
     int flag=0; 
     int l=java.util.Arrays.asList(temp).indexOf(zz); 
     for(int p=0;p<l;p++){ 
      if(temp[p]==zz){ 
       flag=flag+1; 
      } 
     } 
     if(flag==0){ 
      return false; 
      } 
     else{ 
      return true; 
      } 
    } 

    public static void main(String[] args) { 
     Scanner sc=new Scanner(System.in); 
     System.out.println("enter the no of array elements"); 
     int numOfNumbers = sc.nextInt(); 

     int arrayOfNumbers[] = new int[numOfNumbers]; 
     for (int i = 0; i < numOfNumbers; i++) { 
      System.out.print("Enter the number:"); 
      arrayOfNumbers[i] =sc.nextInt(); 
     } 

     for(int i = 0; i<numOfNumbers; i++){ 
      int z=arrayOfNumbers[i]; 
      if(!(isRepeated(arrayOfNumbers,z))){ 
       int count=0; 
       for(int j=0;j<numOfNumbers;j++){ 

        if(arrayOfNumbers[j]==arrayOfNumbers[i]){ 
         count=count+1; 
        } 
        else{ 
         continue; 
        } 
       } 
       System.out.println("Frequency of "+arrayOfNumbers[i]+"is"+count); 
      } 
      else{ 
       continue; 
      } 
     } 
    } 
} 

實施例預期輸出頻率的[2,20,11,10,5,14,47,23,20,12,11,10]

  • 2:1頻率20的:2頻率的11:2頻率 10:頻率的5 2:1頻率14:頻率的47 1:1 頻率的23:頻率的1 12:1

請幫助糾正我的代碼而不是提出新的邏輯。

+0

'的indexOf()''中使用isRepeated()'返回的數量第一次出現。改變方法。 –

+0

用lastIndexOf()替換indeOf(),但爲什麼所有這些for循環?你想做什麼? – esprittn

+0

改寫之前(以及之後)的代碼,並澄清措辭+標題「問」。 – Virgil

回答

0

你可以使它更容易:

public class Freq { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("enter the no of array elements"); 
     int numOfNumbers = sc.nextInt(); 

     Integer[] arrayOfNumbers = new Integer[numOfNumbers]; 
     for (int i = 0; i < numOfNumbers; i++) { 
      System.out.print("Enter the number:"); 
      arrayOfNumbers[i] = sc.nextInt(); 
     } 

     // to remember for what numbers we already count freq 
     List<Integer> tmpList = new ArrayList<>(numOfNumbers); 

     for (Integer number : arrayOfNumbers) { 
      if (!tmpList.contains(number)) { 
       tmpList.add(number); 
       System.out.println("Frequency of " + number + " is " + Collections.frequency(Arrays.asList(arrayOfNumbers), number)); 
      } 
     } 
    } 
}