2016-12-16 45 views
0

我有整数平方矩阵。我需要在每一行中找到最大的元素,并用主对角元素来改变它。java中的整数方阵

我的变种:

public class matrix { 

    public static void main(String[] args) { 
     int[][] arr={{4,3,5}, 
        {6,7,1}, 
        {9,8,2}}; 
     int max; 
     int temp; 
     for(int i=0; i<arr.length; i++){ 
      max=0; 
      for(int j=0; j<arr.length; j++){ 
      if(max<arr[i][j]){ 
       max=arr[i][j]; 

      for(int k=0; k<arr.length; k++){  
       if(i==k){ 
        temp=arr[i][k]; 
        arr[i][k]=arr[i][j]; 
        arr[i][j]=temp; 
       } 
      } 
      } 
      } 
     } 
     for(int i=0; i<arr.length; i++){ 
      for(int j=0; j<arr.length; j++){ 
       System.out.print(arr[i][j]+" "); 
      } 
      System.out.println(""); 
     } 

    } 
} 

最后我必须有这个array:

5 3 4 
6 7 1 
2 8 9 

但它使在第二行的错误,并表示这样的:

5 3 4 
7 6 1 
2 8 9 

我在哪里犯错

+1

请问您能解释一下主要对角元素是什么意思。 –

+0

同意@AnuragJoshi。主对角线上有多个元素。 –

+0

主要对角元素是4,7,2。 –

回答

0

它看起来像你的问题是在你的循环

for(int i=0; i<arr.length; i++){ 
    max=0; 
    for(int j=0; j<arr.length; j++){ 
     if(max<arr[i][j]){ 
      max=arr[i][j]; 
      for(int k=0; k<arr.length; k++){  
       if(i==k){ 
        temp=arr[i][k]; 
        arr[i][k]=arr[i][j]; 
        arr[i][j]=temp; 
       } 
      } 
     } 
    } 
} 

在这里,你可以看到你找到max,然后进入swap循环。

鉴于您应该先找到rowmax,然后尝试将它们交换。所以像这样的东西代替。

//Iterate through the rows. 
for(int i=0; i<arr[0].length; i++){ 
    max=0; 
    int m = 0; 
    //find the max of the row. 
    for(int j=0; j<arr[i].length; j++){ 
     if(max<arr[i][j]){ 
      max=arr[i][j]; 
      m = j; //Store the column of where the max is. 
     } 
    } 
    //Swap the two numbers 
    for(int k=0; k<arr[i].length; k++){  
     if(i==k){ 
      temp=arr[i][k]; 
      arr[i][k]=arr[i][m]; 
      arr[i][m]=temp; 
     } 
    } 
}