2016-08-24 23 views
-3

配列の配列をより具体的には2D配列として考える私のシナリオのロジックを作成するのが難しいです.iは2D配列の最大値を探したいのですが、呼び出したくありませんそれはメインmethod.iで配列をannonymousとして作成し、静的データmembers.theを介してmaxの関数を呼び出しています。コードは次のようなものです。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'という名前の変数を利用する必要がありますか?ところで、「大」は「静的」ではなく、「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

1文字の編集は許可されません。 'return large'にはセミコロンが必要です。これは空の2次元配列に対して 'Integer.MIN_VALUE'を返します。適切なレスポンスが何であるかは不明ですが(IllegalArgumentException?)、考慮する価値があります。そうでなければ、まさに私が言うつもりだったのです。 – user2478398

+0

@ user2478398コメントをいただきありがとうございます –

2

私はあなたにそれを解決するために行くが、ここでアルゴリズム

  1. あるわけではないに
  2. アサイン最大のローカル変数maxを持っています配列の最初の値
  3. 配列全体を反復し、maxの現在の値よりも大きな値が見つかるたびにmaxの値を変更します。
  4. リターン最大
0

AのJava 8ワンライナー、代わりにあなたのforループ:

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