Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阵列中元素的频率_Java - Fatal编程技术网

Java 阵列中元素的频率

Java 阵列中元素的频率,java,Java,我对编程比较陌生,我已经在一个java项目上工作了大约2天,该项目可以读取10个数字并显示每个数字的出现频率,虽然我的代码看起来不错并且运行正常,但它似乎无法计算两个相距甚远的数字,即使在排序之后,请告诉我,我已经没有什么想法了,我愿意接受建议 这是我的密码: public static void sortarray(int [] tennumbersarray ){ for(int i =0 ;i<9;i++){ int currentmin = tennumbe

我对编程比较陌生,我已经在一个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;
     }
 }
 }
publicstaticvoidsortarray(int[]tennumbersarray){
对于(int i=0;i请尝试以下代码:

public int[] frequency(int[] tennumbers){
int[] frequency = new int[100];
for(int i=0; i< tennumbers.length ; i++){
frequency[tennumbers[i]]++;
}
return frequency;
}
我认为使用你可以很容易地找到频率的数字

例:

输出

三,

你可以用地图

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());
}
publicstaticvoidmain(字符串[]args){
int tennumbersarray[]=新int[10];
对于(int i=0;i<10;i++){
字符串tennumbersstring=JOptionPane.showInputDialog(“输入一个数字:”);
tennumbersarray[i]=整数.parseInt(tennumbersstring);
}
映射频率=新HashMap();
用于(整数编号:tennumbersarray)
if(frequences.get(number)==null)
频率。输入(数字,1);
其他的
frequences.put(数字,frequences.get(数字)+1);
for(条目:frequences.entrySet())
JOptionPane.showMessageDialog(null,entry.getKey()+“--->”+entry.getValue());
}

对数组进行排序以计算其项的频率是一个可行的想法,但这不是必须的。例如,如果有人告诉我(在Unix计算机上)有一个文件,我会使用这种方法有数千个数字,我被要求在不编写任何Java代码的情况下计算每个数字在该文件中出现的次数:

cat文件| sort-n | uniq-c

但是,由于您的任务是编写第一个Java程序之一,我向您介绍了哈希表的概念。在Java中,这样的哈希表是使用
哈希映射实现的,其中键是整数,值也是整数(首先)。每次遇到整数时,您都会增加其计数:

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} ...
}
公共静态映射计数(int[]int){
Map counter=newhashmap();
for(整数i:整数){
if(柜位集装箱(一))
counter.put(i,counter.get(i)+1);
其他的
counter.put(i,1);//初始化
}
return counter;//在这里,我们将每个数字映射到
//它在int{1:23,3:2}中出现了多少次。。。
}

请格式化/缩进代码并删除不相关的代码方法,这样我们可以更快地看到可能的原因所在……此外,使用camelCase作为变量名,这样更易于阅读:
tennumbersarray
=>
tennumbersarray
直接寻址?如果
tennumbers
中的某个数字是
=100 numberAndItsOcuurenceMap.get(10);
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());
}
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} ...
}