使用 HashMap 和 ArrayList 查找数据集的模式。想不通
Finding Mode of a Data Set using HashMap and ArrayList. Can't figure it out
所以我试图制作一组方法来找到给它的一组整数的模式(以数组的形式),return 一个包含所有模式的数组,包括没有模式的可能性。我坐下来写了这些代码片段,但经过大量调试后我无法让它工作。该代码的风格不是很好,但我只想知道是否有人能弄清楚出了什么问题。顺便说一下,main() 方法只是用来测试该方法的。这是代码:
public static int[] getMode(int[] numset) {
Map<Integer, Integer> vals = new HashMap<Integer, Integer>();
ArrayList<Integer> modes = new ArrayList<Integer>();
int highCount = 0;
for(int num : numset) {
if(vals.containsKey(num))
vals.put(num, vals.get(num) + 1);
else
vals.put(num, 0);
}
if(allValuesEqual(vals)) return new int[0];
for(int key : vals.keySet()) {
if(vals.get(key) > highCount) {
highCount = vals.get(key);
}
}
for(int key : vals.keySet()) {
if(vals.get(key) == highCount)
modes.add(key);
}
int[] mode = new int[modes.size()];
int count = 0;
for(int num : modes) {
mode[count] = num;
count++;
}
return mode;
}
private static boolean allValuesEqual(Map<Integer,Integer> vmap) {
ArrayList<Integer> a = new ArrayList<Integer>();
for(int key : vmap.keySet()) {
a.add(vmap.get(key));
}
for(int i = 0, n = a.size(); i < n; i++) {
if(a.get(i) != a.get(0) && i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
int[] array = {6,10,10};
System.out.println(getMode(array));
}
结果:[I@677327b6
。
我完全被难住了。有什么想法吗?
您可以使用 Arrays.toString()
轻松打印出数组的内容:
public static void main(String[] args) {
int[] array = {6,10,10};
System.out.println(Arrays.toString(getMode(array)));
}
您得到的上一个结果[I@677327b6
是一个参考值。
所以我试图制作一组方法来找到给它的一组整数的模式(以数组的形式),return 一个包含所有模式的数组,包括没有模式的可能性。我坐下来写了这些代码片段,但经过大量调试后我无法让它工作。该代码的风格不是很好,但我只想知道是否有人能弄清楚出了什么问题。顺便说一下,main() 方法只是用来测试该方法的。这是代码:
public static int[] getMode(int[] numset) {
Map<Integer, Integer> vals = new HashMap<Integer, Integer>();
ArrayList<Integer> modes = new ArrayList<Integer>();
int highCount = 0;
for(int num : numset) {
if(vals.containsKey(num))
vals.put(num, vals.get(num) + 1);
else
vals.put(num, 0);
}
if(allValuesEqual(vals)) return new int[0];
for(int key : vals.keySet()) {
if(vals.get(key) > highCount) {
highCount = vals.get(key);
}
}
for(int key : vals.keySet()) {
if(vals.get(key) == highCount)
modes.add(key);
}
int[] mode = new int[modes.size()];
int count = 0;
for(int num : modes) {
mode[count] = num;
count++;
}
return mode;
}
private static boolean allValuesEqual(Map<Integer,Integer> vmap) {
ArrayList<Integer> a = new ArrayList<Integer>();
for(int key : vmap.keySet()) {
a.add(vmap.get(key));
}
for(int i = 0, n = a.size(); i < n; i++) {
if(a.get(i) != a.get(0) && i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
int[] array = {6,10,10};
System.out.println(getMode(array));
}
结果:[I@677327b6
。
我完全被难住了。有什么想法吗?
您可以使用 Arrays.toString()
轻松打印出数组的内容:
public static void main(String[] args) {
int[] array = {6,10,10};
System.out.println(Arrays.toString(getMode(array)));
}
您得到的上一个结果[I@677327b6
是一个参考值。