Печать 2D массива неожиданного вывода Java - PullRequest
0 голосов
/ 01 февраля 2019

Я не уверен, что с кодом что-то не так, потому что всякий раз, когда я пытаюсь запустить его вручную, он работает.какие-нибудь идеи, как я могу это исправить?

  1. это мой метод

    public static int[][] mystry2d(int[][] a){
    for(int r = 0; r<a.length; r++){
    for(int c=0; c<a.length-1;c++){
    if(a[r][c+1] > a[r][c]){
     a[r][c] = a[r][c+1] ;
       }
      }
     }
      return a ;
    }
    
  2. мой метод печати

           public static void printArray(int[][] arr){ 
           for (int i=0;i<arr.length;i++){
           for(int j=0;j<arr[i].length;j++){ 
            System.out.print(arr[i][j]);
                           }
            System.out.println();
         }
     }
    

3.вход и ожидаемый вывод

       **input:** int[][] numbers= {{3,4,5,6},{4,5,6,7},{5,6,7,8}};

       **output:** 4 5 6 6
                   5 6 7 7
                   6 7 8 8

4.выход при запуске кода

        4 5 5 6
        5 6 6 7
        6 7 7 8

1 Ответ

0 голосов
/ 01 февраля 2019

Итак, вы пытаетесь превратить этот массив

3 4 5 6
4 5 6 7
5 6 7 8

в

4 5 6 6
5 6 7 7
6 7 8 8

, чтобы он в основном «сдвигал» значения влево, но только если новые значениябольше, чем предыдущие.Однако у вашей логики есть недостаток: вы используете в обоих циклах a.length в качестве предела, предполагая, что массив «квадратный», тогда вы правильно игнорируете последний столбец.Однако в массиве 3x4 алгоритм заставляет работать только первые два столбца, а не третий!Вы должны искать реальную длину текущей строки массива, чтобы избежать странных ошибок.Ваш алгоритм может затем стать:

public static int[][] mystry2d(int[][] a){
 for(int r = 0; r<a.length; r++){
  for(int c=0; c<a[r].length-1;c++){
   if(a[r][c+1] > a[r][c]){
    a[r][c] = a[r][c+1] ;
   }
  }
 }
 return a ;
}

, пожалуйста, также рассмотрите возможность кэширования этого значения, чтобы оно не переоценивалось на каждой итерации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...