找到多维数组中的最大元素

时间:2015-02-13 20:12:06

标签: java arrays multidimensional-array

我必须使用一种方法编写一个程序,该方法返回二维数组中最大元素的位置。

例如

输入数组的行数和列数:

3 4

输入数组:

23.5 35 2 10

4.5 3 45 3.5

35 44 5.5 9.6

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

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

symbol:变量maxvalue

location: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:已经在locateLargest中定义了maxValue(double [] [])

                            double maxValue = a[i][j];
                                   ^

homework1a.java:88:我已经在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]);
           }
      }
 }

}

4 个答案:

答案 0 :(得分:1)

您要声明变量rowcolumnmaxValue两次。

enter image description here

另外,在行中:

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

您的代码中没有maxvalue这样的内容,也不是largest的成员

在这部分代码中:

enter image description here

由于i已在外部for-loop中声明,因此您无需再次声明它。只需使用:

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

答案 1 :(得分:0)

  

。您无需在代码段下面发布完整代码就足够了

   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;

答案 2 :(得分:0)

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

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

homework1a.java:88:我已经在main中定义了(java.lang.String [])

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

答案 3 :(得分:0)

的问题:

  • j上的循环应使用[i] .length
  • if块中的行重新声明变量,删除关键字&#39; double&#39;
  • 您没有声明在任何地方设置最大,因此您有逻辑问题
  • 使用maximum.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};
}
祝你好运!