定位多维数组中的最大元素

Locate the largest element in a multidimensional arrays

我必须使用 returns 二维数组中最大元素的位置的方法编写程序。

例子

输入数组的行数和列数:

3 4

输入数组:

23.5 35 2 10

4.5 3 45 3.5

35 44 5.5 9.6

最大元素的位置在 (1, 2)

我已经完成了我的代码,但它不工作。我该如何解决?我得到的只是以下错误:

符号:变量最大值

位置:class int[]

                    if (a[i][j] > largest.maxvalue)
                                         ^

homework1a.java:51: 行已在 locateLargest(double[][])

中定义
                            double row = i;
                                   ^

homework1a.java:52: 列已在 locateLargest(double[][])

中定义
                            double column = j;
                                   ^

homework1a.java:53: maxValue 已在 locateLargest(double[][])

中定义
                            double maxValue = a[i][j];
                                   ^

homework1a.java:88: i 已经在 main(java.lang.String[])

中定义
                    for (int i = 0; i < 2; i++)
                             ^

5 个错误

我的代码

import java.util.Scanner;
public class hwm1 {

public static int[] locateLargest(double[][] a)
{

        int[] largest = new int[2];

        double row = 0;
        double column = 0;
        double maxValue = a[0][0];

        for (int i = 0; i < a.length; i++)
        {
                for (int j = 0; j < a.length; j++)
                {
                        if (a[i][j] > largest.maxvalue)
                        {
                                double row = i;
                                double column = j;
                                double maxValue = a[i][j];
                        }
                }
        }

        return largest;
}
public static void main(String[] args)
 {
                //Create Scanner
                Scanner input = new Scanner(System.in);

                //User input rows and columns
                System.out.println("Enter the number of rows and columns in the array: ");

                int numberOfRows = input.nextInt();
                int numberOfColumns = input.nextInt();


                //User input data in array
                System.out.println("Enter numbers into array: ");
                //Create array
                double[][] a = new double[numberOfRows][numberOfColumns];
                for (int i = 0; i < a.length; i++)
      {
                        for (int j = 0; j < a[i].length; j++)
           {
                                a[i][j] = input.nextDouble();
           }
                        int[] largest = locateLargest(a);
                        System.out.println("The location of the largest element is at "+ "("+largest[0] +", " + largest[1] + ")");
                        for (int i = 0; i < 2; i++)
                {
                        System.out.print(largest[i]);
           }
      }
 }

}

您声明了变量 rowcolumnmaxValue 两次。

此外,在行中:

 if (a[i][j] > largest.maxvalue)

你的代码中没有maxvalue这样的东西,也不是largest

的成员

在这部分代码中:

因为i已经在外层for-loop声明了,所以不需要再声明。只需使用:

...
 for(i = 0; i < 2; i++){
   ...
}

. You don't need to post full code below code snippet is sufficient

   double row = 0; //declaring first time
    double column = 0;//declaring first time 
    double maxValue = a[0][0];//declaring first time 

    for (int i = 0; i < a.length; i++)
    {
            for (int j = 0; j < a.length; j++)
            {
                    if (a[i][j] > largest.maxvalue)// there is no variable maxvalue in Array class in java
                    {
                            double row = i; // declaring again 
                            double column = j;// declaring again 
                            double maxValue = a[i][j];// declaring again 
                    }
            }
    }

    return largest;

homework1a.java:51:, homework1a.java:52:, homework1a.java:53:

对于这三个,删除 'double'。如果您在引用变量时声明类型,Java 将假定您正在尝试定义相关变量。在这里您已经定义了这三个。此外,由于您根本不使用行或列,我建议您直接删除它们。

homework1a.java:88: i 已经在 main(java.lang.String[])

中定义

对于这个,你有一个嵌套的 for 循环,但它也使用了 i。您应该将 k 用于第二个嵌套 for 循环(使用 j 的循环之后的那个)。

问题:

  • 循环 j 应该使用 a[i].length
  • if 块中的行正在重新声明变量,删除关键字 'double '
  • 你没有在任何地方声明最大设置,所以你有逻辑问题
  • 使用 largest.maxValue 在逻辑上是不正确的,因为它应该包含行号和列号而不是实际的最大值

我会通过重写代码来解决这个问题,我认为这是实现目标的最有效方法:

public static int[] locateLargest(double[][] a)
{

    int maxRow=-1,maxCol=-1;
    double maxVal=-1;

    for (int i = 0; i < a.length; i++)
    {
        for (int j = 0; j < a[i].length; j++)
        {
            if (a[i][j] > maxVal)
            {
                maxRow = i;
                maxCol = j;
                maxVal = a[i][j];
            }
        }
    }

    return new int[]{maxRow,maxCol};
}

祝你好运!