我需要一些帮助才能使我的Java方法(getNumGroupsOfSize)工作。它应该计算一个数组" group" (共享相同值的连续元素)是,然后打印出共享该大小的其他组的数量。例如,数组[1,1,1,2,2,2,3,3,3,4,5,6,7]
将打印:
size 1=4
size 3=3
然后会停止运行。
这是我到目前为止所做的:
import static java.lang.System.*;
import java.util.Arrays;
import java.util.Scanner;
public class ArrayStats {
int[] numArray;
int number;
public ArrayStats(int[] array) {
setArray(array);
}
public void setArray(int[] array) {
numArray = array;
}
public int getNumGroupsOfSize() {
int cnt = 0;
for (int x = 0; x < numArray.length - 1; x++) {
if (numArray[x] == numArray[x + 1]);
cnt++;
for (int y = 2; y <= 9; y++) {
if (cnt == y)
number = cnt;
else if (cnt == 1)
number = 1;
}
}
return number;
}
public String toString() {
return "size count" + " == " + getNumGroupsOfSize() + Arrays.toString(numArray);
}
}
我非常确定我的getNumGroupsOfSize编码不正确,但我不确定如何使其正常工作。我真的很感激可以提供任何帮助。如果您需要更多信息,请不要犹豫,发表评论。谢谢!
答案 0 :(得分:0)
您的方法getNumGroupsSize()
没有多大意义。例如,如果只存储一个数字,如何打印出所有组?我写了新方法,它直接打印数字。如果您愿意,也可以将它们存储在数组中。
public void getNumGroupsOfSize() {
int cnt = 1;
int currentNumber = numArray[0];
for (int x = 0; x < numArray.length - 1; x++) {
if (numArray[x] == numArray[x + 1]){
cnt++;
}
else{
System.out.println(currentNumber + ": " + cnt);
currentNumber=numArray[x+1];
cnt=1;
}
}
System.out.println(currentNumber + ": " + cnt);
}
答案 1 :(得分:0)
对于每个遇到的系列,您必须计算其大小并更新有关此大小的系列数量的信息。
因此,您使用的int number
字段显然不足以实现它,因为它只保留了非常基本的信息。
在您的情况下,您需要有两个相关信息:对于每个系列大小,您想知道具有此大小的系列数。
Map
对象应该完成这项工作。
它将使用系列大小作为关键字,并使用具有此大小的系列数值。
Map<Integer, Integer> occurrenceBySeriesSize = new HashMap<>();
每次遇到遇到的系列时,请使用新计数更新地图:
int serieSize = ...;
Integer occurrences = occurrenceBySeriesSize.get(serieSize);
if (occurrences == null){
occurrences = 0;
}
occurrenceBySeriesSize.put(serieSize, ++occurrences);