我对编程比较陌生,我一直在研究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;
}
}
}
答案 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];