数组中元素的频率

时间:2016-05-20 16:38:52

标签: java

我对编程比较陌生,我一直在研究java项目大约2天,读取10个数字并显示每个数字的出现频率,而我的代码看起来很好并且运行,它似乎不是能够计算两个相距很远的数字,即使在排序之后,请我已经用完了想法并且愿意接受建议

这是我的代码:

public static void sortarray(int [] tennumbersarray ){
    for(int i =0 ;i<9;i++){
        int currentmin = tennumbersarray[i];
        int currentminindex = i;
        for(int j=i+1;j<10;j++){
            if(currentmin>tennumbersarray[j]){
                currentmin= tennumbersarray[j];
                currentminindex = j;
            }
        }
        if(currentminindex!=i){
            tennumbersarray[currentminindex]=tennumbersarray[i];
            tennumbersarray[i]=currentmin;
        }
    }
}
public static void main(String[] args) {
    int tennumbersarray [] = new int[10];
    for (int i =0 ;i<10;i++){
        String tennumbersstring = JOptionPane.showInputDialog("enter a number :");
        tennumbersarray [i] = Integer.parseInt(tennumbersstring);
    }

    sortarray ( tennumbersarray);

    for (int i=0;i<10;i++){            
         int count =1;
         for (int j=i+1;j<10;j++)
         {
             if(tennumbersarray[i]==tennumbersarray[j])
             {
                 count++;
             }
             else{
                 break;
             }
         }
         String output = ""+tennumbersarray[i] +"----> "+count;
         JOptionPane.showMessageDialog (null,output);
         i+=count;
     }
 }
 }

4 个答案:

答案 0 :(得分:1)

我认为使用HashMap您可以轻松找到该数字的频率。

例如:

int tenNumbersArray[] = new int[10];

tenNumbersArray[0] = 10;
tenNumbersArray[1] = 20;
tenNumbersArray[2] = 30;
tenNumbersArray[3] = 10;
tenNumbersArray[4] = 10;
tenNumbersArray[5] = 40;
tenNumbersArray[6] = 50;
tenNumbersArray[7] = 60;
tenNumbersArray[8] = 70;
tenNumbersArray[9] = 70;

HashMap<Integer, Integer> numberAndItsOcuurenceMap = new HashMap<Integer, Integer>();

for (int num : tenNumbersArray) {
    Integer frequency = numberAndItsOcuurenceMap.get(num);
    numberAndItsOcuurenceMap.put(num, frequency != null ? frequency + 1 : 1);
}

输出:

  

{50 = 1,70 = 2,20 = 1,40 = 1,10 = 3,60 = 1,30 = 1}

获取特定频率只是将密钥传递给地图。 例如:

 numberAndItsOcuurenceMap.get(10);

输出

  

3

答案 1 :(得分:0)

您可以使用地图

public static void main(String[] args) {
    int tennumbersarray[] = new int[10];
    for (int i = 0; i < 10; i++) {
        String tennumbersstring = JOptionPane.showInputDialog("enter a number :");
        tennumbersarray[i] = Integer.parseInt(tennumbersstring);
    }
    Map<Integer, Integer> frequences = new HashMap<Integer, Integer>();

    for(int number : tennumbersarray)
        if(frequences.get(number) == null)
            frequences.put(number, 1);
        else
            frequences.put(number, frequences.get(number) + 1);

    for(Entry<Integer, Integer> entry : frequences.entrySet())
        JOptionPane.showMessageDialog(null, entry.getKey() + "----> " + entry.getValue());
}

答案 2 :(得分:0)

尝试对数组进行排序以计算其项目的频率是一个有效的想法,但这不是必需的。例如,如果我被告知有一个包含数千个数字的文件(在Unix计算机上),并且我被要求计算每个数字在该文件中出现的次数,那么我会使用该方法编写任何Java代码

cat file | sort -n | uniq -c

但是由于您的任务是编写第一个Java程序,我将向您介绍哈希表的概念。 Java中的这种哈希表是使用HashMap实现的,其中键是整数,值也是整数(对于初学者)。每次遇到整数时,都会增加其计数:

public static Map<Integer, Long> count(int[] ints) {
    Map<Integer, Integer> counter = new HashMap<>();
    for (int i : ints) {
        if (counter.containsKey(i)) 
            counter.put(i, counter.get(i) + 1);
        else
            counter.put(i, 1); // initialize
    }
    return counter; // here, we'll have each number mapped to 
                    // how many times it appears in ints {1: 23, 3: 2} ...
}

答案 3 :(得分:-1)

尝试使用此代码:

public int[] frequency(int[] tennumbers){
int[] frequency = new int[100];
for(int i=0; i< tennumbers.length ; i++){
frequency[tennumbers[i]]++;
}
return frequency;
}

这样你就可以知道频率,例如&#39; 60&#39;通过访问频率数组的第60个索引。像这样:

int[] freq=frequency(tennumbers);
int sixtyFrequency=frequ[60];