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