2012-01-20 53 views
5

Dưới đây là đoạn code tôi có cho đến nay:Chuyển đổi một mảng 2D thành một mảng 1D

public static int mode(int[][] arr) { 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     int temp = 0; 
     for(int i = 0; i < arr.length; i ++) { 
      for(int s = 0; s < arr.length; s ++) { 
       temp = arr[i][s]; 

tôi dường như bị mắc kẹt vào thời điểm này về cách để có được [i][s] thành một mảng chiều duy nhất. Khi tôi thực hiện print(temp) tất cả các phần tử của mảng 2D của tôi in ra một lần theo thứ tự nhưng không thể tìm ra cách đưa chúng vào mảng 1D. Tôi là một người mới :(

Làm thế nào để chuyển đổi một mảng 2D thành một mảng 1D?

Mảng 2D hiện tại tôi đang làm việc với là một 3x3. Tôi cố gắng để tìm ra phương thức toán học của tất cả các số nguyên trong . mảng 2D nếu nền đó là tầm quan trọng của bất kỳ

+2

Tôi đã chỉnh sửa câu hỏi của bạn sao cho liên tục 2D-> 1D. Xin hãy cẩn thận hơn với những chi tiết như vậy trong tương lai, chúng rất quan trọng. –

Trả lời

7

Bạn đã gần như đã nhận nó đúng Chỉ cần một sự thay đổi nhỏ:.

public static int mode(int[][] arr) { 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < arr.length; i++) { 
     // tiny change 1: proper dimensions 
     for (int j = 0; j < arr[i].length; j++) { 
      // tiny change 2: actually store the values 
      list.add(arr[i][j]); 
     } 
    } 

    // now you need to find a mode in the list. 

    // tiny change 3, if you definitely need an array 
    int[] vector = new int[list.size()]; 
    for (int i = 0; i < vector.length; i++) { 
     vector[i] = list.get(i); 
    } 
} 
+0

Cảm ơn bạn rất nhiều Tôi đã đập đầu vào tường về điều này trong một thời gian khá ha-ha. – Kristopher

+0

@KristopherSperlik welcome :) it it _answers_ câu hỏi của bạn, hãy xem xét chấp nhận nó - http://meta.stackexchange.com/a/5235/170914 – alf

3

thay đổi:

for(int i = 0; i < arr.length; i ++) { 
      for(int s = 0; s < arr[i].length; s ++) { 
       temp = arr[i][s]; 
+0

đó là một bước, đúng. – alf

2

Tôi không chắc chắn nếu bạn đang cố gắng chuyển đổi mảng 2D của bạn thành một mảng 1D (như trạng thái câu hỏi của bạn), hoặc đặt các giá trị từ mảng 2D của bạn vào ArrayList bạn có. Tôi sẽ giả định đầu tiên, nhưng tôi sẽ nhanh chóng nói tất cả những gì bạn cần làm sau này là gọi list.add(temp), mặc dù temp thực sự không cần thiết trong mã hiện tại của bạn.

Nếu bạn đang cố gắng để có một mảng 1D, sau đó đoạn mã sau là đủ:

public static int mode(int[][] arr) 
{ 
    int[] oneDArray = new int[arr.length * arr.length]; 
    for(int i = 0; i < arr.length; i ++) 
    { 
    for(int s = 0; s < arr.length; s ++) 
    { 
     oneDArray[(i * arr.length) + s] = arr[i][s]; 
    } 
    } 
} 
+0

chỉ hoạt động đối với mảng vuông. – alf

+1

Điều này đúng - tôi đã đưa ra giả định này bởi vì giả định đó là trong mã ban đầu - có lẽ tôi nên làm rõ điều đó. –

3

"Làm thế nào để chuyển đổi một mảng 2D thành một mảng 1D?"

 String[][] my2Darr = .....(something)...... 
     List<String> list = new ArrayList<>(); 
     for(int i = 0; i < my2Darr.length; i++) { 
      list.addAll(Arrays.asList(my2Darr[i])); // java.util.Arrays 
     } 
     String[] my1Darr = new String[list.size()]; 
     my1Darr = list.toArray(my1Darr); 
+1

Không có loại nguyên thủy nào được phép ở đây. –

Các vấn đề liên quan