【问题标题】:Locate the largest element in a multidimensional arrays定位多维数组中的最大元素
【发布时间】:2015-02-13 20:12:05
【问题描述】:

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

例子

输入数组的行数和列数:

3 4

输入数组:

23.5 35 2 10

4.5 3 45 3.5

35 44 5.5 9.6

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

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

符号:变量最大值

位置:类 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]);
           }
      }
 }

}

【问题讨论】:

  • 尝试跟进您的问题,并提供反馈,说明您在获得帮助的情况下已经走了多远(他们是否帮助了您)。并接受或支持您认为有用的内容。

标签: java arrays multidimensional-array


【解决方案1】:

您要声明变量rowcolumnmaxValue 两次。

另外,在行中:

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

您的代码中没有maxvalue 这样的东西,它也不是largest 的成员

在这部分代码中:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 完成,但我不明白你的意思是“对于这个,你有一个嵌套的 for 循环,但它也使用 i。你应该使用 k 作为嵌套 for 的第二个循环(使用 j 的循环之后的循环)。”
    • 您有三个 for 循环,其中两个在外部循环内。对于外部,您使用 i。对于内部的,您分别使用 j 和 i。对于第二个内部的,我已经存在 - 您在外部 for 循环中使用它。您应该将其重命名为其他名称,并且按照约定使用 k。
    【解决方案3】:

    。你不需要在代码sn-p下面发布完整代码就足够了

       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;
    

    【讨论】:

    【解决方案4】:

    问题:

    • j 上的循环应该使用 a[i].length
    • if 块中的行是重新声明变量,删除关键字'double'
    • 你没有在任何地方声明设置最大,所以你有一个逻辑问题
    • 使用 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};
    }
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2021-11-17
      • 2021-04-13
      • 2023-03-23
      • 2012-01-15
      相关资源
      最近更新 更多