JAVA二維數組的復制


                                                     JAVA二維數組的復制                   

筆者今天做一道ccf題目時,遇到要將二維數組拷貝復制時,沒有用常規的那種一個一個數的復制,用的是System.arraycopy()來進行復制,下面介紹這個函數的一些注意點:

       函數形式:  System.arraycopy(Object src, srcindex, Object dest,destindex,length)

      Object src:源數組  srcindx:原數組起始下標 Object dest:目的數組 destindex:目的數組開始的下標 length:復制的長度

      應該注意的是:這個函數,一維數組復制是可以的,但是二維數組這樣調用的時候,如果改變了目的數組的值,源數組的相應的值也會改變

    如果還是要用,可以用這樣的方式,一行一行的,當成一維數組來進行調用這個函數復制。

    for (int i = 0; i < src.length; i++) {
         System.arraycopy(a[i], 0, dest[i], 0, dest[0].length);
    }

   附上那道題目和我的解法:

試題編號: 201512-2
試題名稱: 消除類游戲
時間限制: 1.0s
內存限制: 256.0MB
問題描述:
問題描述
  消除類游戲是深受大眾歡迎的一種游戲,游戲在一個包含有n行m列的游戲棋盤上進行,棋盤的每一行每一列的方格上放着一個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除。
  現在給你一個n行m列的棋盤,棋盤中的每一個方格上有一個棋子,請給出經過一次消除后的棋盤。
  請注意:一個棋子可能在某一行和某一列同時被消除。
輸入格式
  輸入的第一行包含兩個整數n, m,用空格分隔,分別表示棋盤的行數和列數。
  接下來n行,每行m個整數,用空格分隔,分別表示每一個方格中的棋子的顏色。顏色使用1至9編號。
輸出格式
  輸出n行,每行m個整數,相鄰的整數之間使用一個空格分隔,表示經過一次消除后的棋盤。如果一個方格中的棋子被消除,則對應的方格輸出0,否則輸出棋子的顏色編號。
樣例輸入
4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4
樣例輸出
2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4
樣例說明
  棋盤中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
樣例輸入
4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3
樣例輸出
2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0
樣例說明
  棋盤中所有的1以及最后一行的3可以被同時消除,其他的方格中的棋子均保留。
評測用例規模與約定
  所有的評測用例滿足:1 ≤ n, m ≤ 30。

     

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] arg0) {
 6         Scanner sc = new Scanner(System.in);
 7         int n = sc.nextInt();
 8         int m = sc.nextInt();
 9         int[][] a = new int[n][m];
10         int[][] aa = new int[n][m];
11         for (int i = 0; i < n; i++) {
12             for (int j = 0; j < m; j++) {
13                 a[i][j] = sc.nextInt();
14             }
15         }
16         for (int i = 0; i < a.length; i++) {
17             System.arraycopy(a[i], 0, aa[i], 0, a[0].length);
18         }
19         // for (int i = 0; i < a.length; i++) {
20         // for (int j = 0; j < a[0].length; j++) {
21         // aa[i][j] = a[i][j];
22         // }
23         // }
24 
25         for (int i = 0; i < a.length; i++) {
26             for (int j = 0; j < a[0].length; j++) {
27                 if (j < a[0].length - 2) {
28                     if (a[i][j] == a[i][j + 1] && a[i][j + 1] == a[i][j + 2])
29                         aa[i][j] = aa[i][j + 1] = aa[i][j + 2] = 0;
30 
31                 }
32                 if (i < a.length - 2) {
33 
34                     if (a[i][j] == a[i + 1][j] && a[i + 1][j] == a[i + 2][j])
35                         aa[i][j] = aa[i + 1][j] = aa[i + 2][j] = 0;
36                 }
37 
38             }
39         }
40 
41         for (int i = 0; i < n; i++) {
42             for (int j = 0; j < m; j++) {
43                 System.out.print(aa[i][j] + " ");
44             }
45             System.out.println();
46         }
47 
48     }
49 
50 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM