2016-09-07 14 views
10

Tôi muốn tạo một ma trận có kích cỡ N bằng N trong đó N là một giá trị không đổi được xác định trên toàn cầu, bây giờ tôi chỉ muốn tạo một ma trận trong đó N = 6. Nơi tôi rơi ngắn gọn là tôi muốn làm cho nó theo đường chéo, như vậy:Tạo ma trận đường chéo N bằng N sử dụng logic cơ bản

0 1 2 3 4 5 
1 0 1 2 3 4 
2 1 0 1 2 3 
3 2 1 0 1 2 
4 3 2 1 0 1 
5 4 3 2 1 0 

Hiện nay tôi có phương pháp này:

public static void drawMatrix(){ 
    for (int line = 0; line < N; line++){ 
     for (int j = 0; j < N; j++){ 
      System.out.print(j + " "); 
     } 
     System.out.println(); 
    } 
} 

Đáng tiếc là nó chỉ có thể in 0 1 2 3 4 5 trong mỗi dòng , vì vậy tôi cho rằng tôi cần một vòng lặp lồng nhau khác, tuy nhiên tôi không chắc chắn làm thế nào để thiết lập nó.

+5

Bạn đã có hai vòng, có lẽ bạn sẽ thấy nó rõ ràng hơn nếu bạn đổi tên 'j' là 'column'. Giá trị bạn đặt trong mỗi ô là chênh lệch tuyệt đối (dương) được gắn hàng và cột. – SJuan76

+1

@ SJuan76 là đúng.OP nên kiểm tra luồng chương trình đặc biệt trong trường hợp vòng lặp bằng tay để tìm lỗi trong logic của mình – Gaur93

+0

Sau khi đọc nhận xét của @ SJuan76 tôi đã thay đổi câu lệnh in thành "print (Math.abs (line-column) +" " dasblinkenlight cũng là đúng trong giải pháp của mình, mặc dù giải pháp đã đề cập trước đây có vẻ dễ chịu hơn và dễ đọc hơn – UndyingJellyfish

Trả lời

10

j là số cột, vì vậy nó sẽ giống nhau cho tất cả các hàng. Những gì bạn cần làm là cộng hoặc trừ j từ số dòng, tùy thuộc vào số dòng, để thực hiện "thay đổi". Kể từ khi kết quả có thể trở thành tiêu cực, bạn sẽ cần phải thêm Nmod bởi N:

if (j > line) { 
    System.out.print((N-line+j)%N + " "); 
} else { 
    System.out.print((line-j+N)%N + " "); 
} 

Demo.

Bạn cũng có thể viết lại nó mà không có một if sử dụng một biểu thức điều kiện:

int sign = j > line ? -1 : 1; 
System.out.print((N+sign*(line-j))%N + " "); 

Demo.

+0

Hoặc chỉ là giá trị tuyệt đối (không chắc chắn nếu đây là thuật ngữ cho 'Math.abs') của line - column;) để cho điều kiện cho hàm Math. – AxelH

6

Một sự thay đổi nhỏ trong mã của bạn hoạt động

public static void drawMatrix() { 
    for(int line = 0; line < N; line++) { 
     for(int j = 0; j < N; j++) { 
     System.out.print(Math.abs(line - j) + " "); 
     } 
     System.out.println(); 
    } 
} 
1

tôi sẽ làm một cái gì đó như:

int n=6; 

    for(int row=0;row<n;row++) 
    { 
     for(int col = 0;col<n;col++) 
     { 
     System.out.print(abs(col-row) +" "); 
     } 
     System.out.println(); 
    } 

giả sử bạn có thể sử dụng abs(). Tôi hy vọng rằng sẽ giúp mục đích của bạn.

0

này cũng hoạt động:

public static void main(String[] args) { 
    int N = 6; 
    int column = 0; 

    for (int row = 0; row < N; row++) { 
     for (column = row; column >= 0; column--) //prints till row number reaches 0 
      System.out.print(column + " "); 
     for (column = 1; column < N - row; column++)//from 1 to N-row 
      System.out.print(column + " "); 

     System.out.println(); 
    } 
} 
Các vấn đề liên quan