2017-12-14 5 views
-1

다음 코드는 'arista'라는 임의의 다차원 배열을 만들고 md 배열의 각 슬롯을 정수로 채 웁니다.다차원 배열의 값을 배열에 올바르게 저장하는 방법은 무엇입니까?

그런 다음 인쇄합니다. 슬롯이 정수로 채워지는 것을 볼 수 있습니다. 는 그럼, 입력하여 다차원 배열에 저장된 모든 값을 포함하는 목록을해야한다 '중고 장비 구매'라는 배열을 만들려고 :

System.out.printf(Arrays.toString(lista)); 

하지만 결과는 내가 기대했던 것이 아니다. 'arista'의 마지막 행만 'lista'배열에 나타나고 'lista'배열의 슬롯의 다른 부분은 0입니다.

이 문제를 어떻게 해결할 수 있습니까? 뭐가 잘못 되었 니?

전체 코드는 다음과 같습니다

public static void main(String[] args) { 

    int renglones = (int) (Math.random() * 5) + 5; 
    int columnas = (int) (Math.random() * 5) + 5; 

    int[][] arista = new int[renglones][columnas]; 

    int[] lista; 
    lista = new int[renglones * columnas]; 
    int k = 1; 

    for (int i=0; i < renglones; i++){ 
     for (int j=0; j < columnas; j++) { 

     arista[i][j] = k++; 
     lista[j] = arista[i][j]; 

     } 

    } 

     for (int i = 0; i < renglones; i++) { 

     for (int j = 0; j < columnas; j++) { 
      System.out.printf("[%d][%d] = %d \n", i, j, arista[i][j]); 
     } 
     System.out.println(); 
    } 

     System.out.printf(Arrays.toString(lista)); 


} 
+0

디버거를 사용하고 처리하십시오. –

+0

[디버거 란 무엇이며 어떻게 문제를 진단하는 데 도움이됩니까?] (https://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help- 내 진단 문제) –

+1

'lista '에 대한 색인으로'j'를 다시 사용하면 올바르지 않습니다. 'j'와'i'' 둘 다 변경 될 때 어떻게 인덱스가 변경되어야하는지 생각해보십시오. – rgettman

답변

0

lista에 대한 인덱스로 j 귀하의 재사용이 올바르지 않습니다. j0에서 다시 시작하면 첫 번째 j 항목의 내용을 덮어 쓰며 끝 부분의 마지막 행만 남깁니다.

ij을 곱하면됩니다. 둘 중 하나가 0이면 계산 된 색인이 0이 G로 첫 x 째 항목을 겹쳐 9니다. i0에서 1에 갈 때

, 당신은 첫 번째 columnas 항목 과거 인덱스 번호가 아닌 0에서 시작하고 싶어. i1에서 2으로 변경되면 인덱스 2*columnas부터 시작해야합니다. columnas에 의해

-- 1st row --    -- 2nd row -- 
[0][1]...[columnas - 1] [columnas][columnas + 1] ... [2*columnas - 1] ... 

곱하기 i 다음 인덱스를 얻을 수 j를 추가합니다.

lista[i*columnas + j] = arista[i][j]; 
관련 문제