Member 12949087 Ответов: 2

Почему эта программа не работает должным образом ?


Я хочу напечатать транспонирование 2D-массива (матрицы) . Этот код печатает тот же массив вместо транспонированной матрицы ? Какую ошибку я совершаю ?

 package assignment1;
    import java.util.* ;
    public class q11
    {
    public static void main (String argc[] )    
    {
    Scanner e = new Scanner (System.in) ;
    int m  , c=0 ;
    int n;     // finding transpose of a matrix .
    
    System.out.println(" enter number of rows ");
    m= e.nextInt() ; // rows
    System.out.println(" enter number of columns");
    n =e.nextInt() ;//columns

    int twod[][] = new int [m][n] ; // 2d array created .   

    System.out.println(" enter array elements ");
 
    for ( int i = 0 ; i<=m-1 ; i++ )
    {
    for (int j=0 ; j <= n-1 ; j++)
    {
    twod [i][j] = e.nextInt() ;
    }
    }
 
    System.out.println(" array is :");
 
    for ( int i = 0 ; i<=m-1 ; i++)
    {
    for (int j=0 ; j <= n-1 ; j++)
    {
    System.out.print(twod[i][j]+"  ");
    }
     System.out.println("");
    }  
    // transposing matrix .
    for (int i =0 ; i<= m-1 ; i++)
    {
     for (int j=0 ; j<= n -1 ; j++)
     {

    c=twod[j][i] ;
    twod[j][i] = twod[i][j] ;       
    twod[i][j] = c ;
  
     }
         }
 
    System.out.println(" transposed array is : ");
    for ( int i = 0 ; i<=m-1 ; i++)
    {
    for (int j=0 ; j <= n-1 ; j++)
    {
    System.out.print(twod[i][j]+"  ");
    }
     System.out.println("");
    }
 
 
}
        
        
        }


Что я уже пробовал:

Я пытался запустить его в IDE Netbeans .

2 Ответов

Рейтинг:
1

Member 12949087

Когда матрица транспонируется , то есть когда значения обмениваются с помощью переменной c, то внутренний цикл for должен начинаться с j=i+1 . Если j изначально равно 0, то замененные значения снова будут заменены, что приведет к тому же массиву . Например, если мы возьмем m=2, n=2, то он будет печатать один и тот же массив .


Рейтинг:
1

Patrice T

Первая проблема этого кода:

// transposing matrix .
for (int i =0 ; i<= m-1 ; i++)
{
    for (int j=0 ; j<= n -1 ; j++)
    {

        c=twod[j][i] ;
        twod[j][i] = twod[i][j] ;
        twod[i][j] = c ;

    }
}

заключается в том, что он транспонирует каждый элемент 2 раза. Вам нужно изменить петли, чтобы сканировать только половину матрицы (треугольника), своп делает другую половину.

Вторичная проблема, ваш код не обрабатывает неквадратную матрицу.

Вам не нужно транспонировать матрицу, чтобы просто распечатать ее в транспонированном виде.