2016-08-24 176 views
-3

我在为我的场景制作逻辑时遇到了困难,我正在考虑将阵列数组更具体地称为2D阵列。我想要在2D阵列中找到我不想调用的最大值它在主要方法。我做数组作为匿名,并通过静态数据成员从它调用最大的函数。代码如下。让我知道逻辑找到二维数组中最大的否定,因为我发现它很难到值与array.the代码进行比较如下: -阵列2D最大值的阵列

class Max2DArray 
{ 
    static int i; 
    static int j; 
    static int large;//largest number 

    int max(int x[][]) 
    { 
     for(int i=0;i<x.length;i++) 
     { 
      for(j=0;j<x[i].length;i++) 
      { 
       if(x[i][j]<=???)//what should be the comparison here. 
       { 
        ??//what should be done here?? 
       } 
      } 
     } 
     return large 
    } 
    public static void main(String... s) 
    { 
     Max2DArray m1 = new Max2DArray(); 
     int t = m1.max(new int[][]{{20,10,5}, 
            {5,7,6}, 
            {23,31,16}}); 
     System.out.println("the largest number is = "+t); 
    } 
} 
+0

也许你应该使用名为'large'的变量? (顺便说一下,'large'可能不应该是'static','i'和'j'不应该是字段。) – bradimus

回答

2

试试这个:

int max(int x[][]){ 
    // Initialize the value to the lowest value 
    int large = Integer.MIN_VALUE; 
    for(int i = 0; i < x.length; i++) { 
     for(j = 0; j < x[i].length; j++) { 
      // Check if the current value is greater than large 
      if(x[i][j] > large) { 
       // It is greater so we keep the new value 
       large = x[i][j]; 
      } 
     } 
    } 
    return large; 
} 

用java 8,这可能仅仅是:

int max(int x[][]){ 
    return Arrays.stream(x).flatMapToInt(IntStream::of).max().getAsInt(); 
} 
+0

不允许单字符编辑;但'大号'应该有一个分号。这将为一个空的2d数组返回'Integer.MIN_VALUE'。不确定对此有何适当的回应(IllegalArgumentException?),但值得考虑。否则,正是我要说的:)。 – user2478398

+0

@ user2478398感谢您的评论 –

2

我不打算把它解决了给你,但这里是一个算法

  1. 有一个局部变量最大
  2. 分配最大的数组的第一个值
  3. 遍历数组并在每次找到大于当前值max的值时更改max的值。
  4. 回报最大
0

一个Java 8的一行,而不是你的for循环:

Arrays.stream(x).flatMapToInt(arr2 -> Arrays.stream(arr2)).max().getAsInt();