2017-11-09 6 views
1

コードは、個々の配列を合計すると仮定します。その後、どの合計が最大値か最小値かを比較することができます。誰かがより短い方法を知っているか、より効率的ですか?小さな挑戦。 3つの個々の配列の合計を比較する

int[] route1 = {12,34,21,46,25}; 
int[] route2 = {24,1,5,64,10,15,21}; 
int[] route3 = {1,13,15,16}; 

public static String shortestRoute(int [] route1, int [] route2, int [] route3){ 
    int sum1 = 0; 
    int sum2 = 0; 
    int sum3 = 0; 

    int[][] arrays = {route1, route2, route3}; 

    //how to write shorter the part below??? 
    /////////////////////////////////////////////////////////////// 
    for(int i = 0; i<arrays.length; i++){ 
     for(int j =0; j<arrays[i].length; j++){ 

      if(i==0){ 
       sum1 += arrays[i][j]; 
      }else if(i==1){ 
       sum2 += arrays[i][j]; 
      }else{ 
       sum3 += arrays[i][j]; 
      }   
     } 
    } 
    ///////////////////////////////////////////////// 
} 
+1

コードは機能するので、これは問題の適切なサイトではありません。 [code-review stackexchange site](https://codereview.stackexchange.com/)に掲載される方が良いでしょうが、そこに尋ねる場合は、ヘルプファイルを参照して質問が適切に行われるようにしてください。 –

+0

配列の合計を使って、不要な 'if'を取り除くこともできます – BackSlash

答えて

5

配列を使用すると、すべてのループとあなたのプログラムから扱う多次元配列を削除せ、単一のコード行で行うことができ、加算、Javaの8を皮切り:

int sum1 = Arrays.stream(route1).sum(); 
0

もう少し最短/最短ルート計算のための単一行ソリューションの詳細な例

public static void main(String[] args) { 
    int[] route1 = {12, 34, 21, 46, 25}; 
    int[] route2 = {24, 1, 5, 64, 10, 15, 21}; 
    int[] route3 = {1, 13, 15, 16}; 

    shortestRoute(route1,route2,route3); 
    longestRoute(route1,route2,route3); 
} 
private static long shortestRoute(int[]... routes) { 
    return Arrays.stream(routes) 
      .mapToInt(value -> Arrays.stream(value).sum()).min().getAsInt(); 
} 
private static long longestRoute(int[]... routes) { 
    return Arrays.stream(routes) 
      .mapToInt(value -> Arrays.stream(value).sum()).max().getAsInt(); 
} 
関連する問題