如何创建一个计算数组中数组大小的方法?

时间:2017-04-02 09:56:33

标签: java

我需要一些帮助才能使我的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编码不正确,但我不确定如何使其正常工作。我真的很感激可以提供任何帮助。如果您需要更多信息,请不要犹豫,发表评论。谢谢!

2 个答案:

答案 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);