数组元素与平均值不同且小于某个数字

3

我有一个小问题,希望有人能帮忙。我有一个随机元素数组,然后计算平均值并从用户那里扫描一个数字。 我要查找元素数组中与平均值差异小于用户输入数字的数量。

public static double average(int[][] array){
    double average = 0;
    int sum = 0;
    for(int i = 0; i < array.length; i++){
        for(int j = 0; j < array.length; j++){
          sum += array[i][j];
        }
    }
    average = (double) sum/array.length;
    return average;
}

public static void main(String[] args) {
    Random rnd = new Random();
    Scanner scan = new Scanner(System.in);

    int[][] array = new int[4][4];
    for(int i = 0; i < array.length; i++){
        for(int j = 0; j < array.length; j++){
            array[i][j] = rnd.nextInt(10);
        }
    }

    int a = scan.nextInt();
    average(array);
    int elements = 0;
    for(int i = 0; i < array.length; i++){
    for(int j = 0; j < array.length; j++){
        if(array[i][j]) {
          // ?? need help here
        }
    }
}

1
你在 '??' 面临什么问题? - Adriaan Koster
2个回答

2

在这里:

average(array);

您正在调用您的平均值方法......但是您没有使用其结果!
double averageForArray = average(array);

允许您稍后与该值进行比较,例如:

int deltaGivenByUser = scan.nextInt();

for(int i = 0; i < array.length; i++){
  for(int j = 0; j < array.length; j++){
    if(Math.abs(array[i][j] - average) >= deltaGivenByUser) {
      ...

注意:

  • 上述代码只是“伪代码”级别的;我没有通过编译器运行它,所以要小心细微的错误。我的代码旨在给你一个做事情的思路,而不是为了“复制/粘贴/解决问题”。
  • 请仔细看看你的命名。像“a”这样的变量名并没有说出任何意义。我的变量deltaGivenByUser可能并不完美,但至少它可以让你知道这个变量将被用来做什么。
  • 然后更仔细地了解如何使用扫描器;例如,使用 hasNextInt() 方法。现在,当用户提供了一个非数字的内容时,你的代码会失败。
  • 还要分离事物:你有一个很好的方法来计算那个平均值;你也可以创建另一个方法来接收用户提供的值;以便在主方法之外进行处理。

1
这是有风险的:
for(int i = 0; i < array.length; i++){
  for(int j = 0; j < array.length; j++){
  sum += array[i][j];
}

你在两个循环中都使用了外部数组的大小。最好使用子数组的实际大小:
 for(int i = 0; i < array.length; i++) {
      int[] subArray = array[i];
      for(int j = 0; j < subArray.length; j++){
      sum += subArray[j];
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接