2013-10-27 3 views
0

이것은 아마도 매우 쉽습니다. 그러나 Comp Sci 과정에 약 5 주 밖에 걸리지 않으므로 제 부분에 대해 아무런 말을하지 마십시오.Java에서 배열 요소의 값을 올바르게 변경하는 방법은 무엇입니까?

올해 우리 학년의 일환으로, 우리는 '확산과 죽기'게임을 구현해야합니다. 이 게임의 인터페이스는 명령 행에서 12x12 ASCII 레이아웃입니다.

I 인해 말도 안되는 길이 문제, 나의 실제 코드를 해결하기 위해 만든 코드, 여기 있습니다

class PrintTest 
{ 
    public static void main (String[] args) 
    { 
     final char[] array = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}; 


     char[] array1 = array; 
     char[] array2 = array; 
     char[] array3 = array; 

     array2[6] = 'P'; 

     System.out.println("\n"); 

     System.out.print (array1[0]); 
     System.out.print (array1[1]); 
     System.out.print (array1[2]); 
     System.out.print (array1[3]); 
     System.out.print (array1[4]); 
     System.out.print (array1[5]); 
     System.out.print (array1[6]); 
     System.out.print (array1[7]); 
     System.out.print (array1[8]); 
     System.out.print (array1[9]); 
     System.out.print (array1[10]); 
     System.out.print (array1[11]); 

     System.out.print("\n"); 

     System.out.print (array2[0]); 
     System.out.print (array2[1]); 
     System.out.print (array2[2]); 
     System.out.print (array2[3]); 
     System.out.print (array2[4]); 
     System.out.print (array2[5]); 
     System.out.print (array2[6]); 
     System.out.print (array2[7]); 
     System.out.print (array2[8]); 
     System.out.print (array2[9]); 
     System.out.print (array2[10]); 
     System.out.print (array2[11]); 

     System.out.print("\n"); 

     System.out.print (array3[0]); 
     System.out.print (array3[1]); 
     System.out.print (array3[2]); 
     System.out.print (array3[3]); 
     System.out.print (array3[4]); 
     System.out.print (array3[5]); 
     System.out.print (array3[6]); 
     System.out.print (array3[7]); 
     System.out.print (array3[8]); 
     System.out.print (array3[9]); 
     System.out.print (array3[10]); 
     System.out.print (array3[11]); 

     System.out.print("\n"); 
    } 
} 

또한, 당신은 분명히 볼 수 있듯이, 수 없었다 전체 배열을 인쇄하는 방법을 찾으십시오. 그래서 내 솔루션의 추함을 고려할 때 어떤 힌트도 유용 할 것입니다. 그 코드/실행을 준수 할 때 어쨌든

, 나는이 얻을 : 내 틀림 제한 자바의 이해와 일반적인 프로그래밍을 감안할 때

######P##### 
######P##### 
######P##### 

는 만 두 번째 줄은 그 안에 'P'를해야한다 . 어떤 이유로 든 array2의 명령문 변경 요소 6은 다른 두 배열에 대해서도 동일한 작업을 수행합니다.

도움을 많이 주시면 감사하겠습니다.

+0

아마도 http://stackoverflow.com/questions/12772443/how-to-change-value-of-arraylist-element-in- 자바 –

답변

0

이것은 하나의 배열 만 만들었고 3 개의 변수에서 정확히 같은 배열을 참조했기 때문입니다.

당신은 다음과 같이 세 별도의 배열을 생성해야합니다

char[] array1 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}; 
char[] array2 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}; 
char[] array3 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}; 
2

원시적 배열은 객체처럼이기 때문에,이 참조를 누릅니다. 따라서 array2[6] = 'P'을 지정할 때 array[6] = 'P'이므로 array1[6] = 'P'array3[6] = 'P'을 말하는 것과 같습니다.

이렇게하려면 배열을 만드는 동안 clone() 메서드를 호출하면됩니다. 당신이 배열의 요소를 지정 복사하려면

char[] array1 = array.clone(); 
char[] array2 = array.clone(); 
char[] array3 = array.clone(); 

, 당신은 Arrays.copyOfRange를 사용할 수 있습니다

char[] array1 = Arrays.copyOfRange(array, 0, array.length); 
            ^^ ^
            | |  | 

            | | indice to 

            | indice from 

            | 
          array to be copied 

은 또한 당신의 배열을 인쇄하려면, 당신은 루프를 사용할 수 있습니다. 모든 배열 이후

for(int i = 0; i < array1.length; i++) 
    System.out.print(array1[i]); 

System.out.println(); 
1

당신이 배열을 인쇄하는 기능을 만들 수 있습니다

인쇄 같은 값을 받고 동일한 참조를 가리키고, 대신 배열을 할당하는

class PrintTest 
{ 
    public static void main (String[] args) 
    { 
     final char[] array = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}; 
     char[] array1 = array; 
     char[] array2 = array; 
     char[] array3 = array; 
     array2[6] = 'P'; 
     printArr(array1); 
     printArr(array2); 
     printArr(array3); 

    } 

    public static void printArr(char[] array){ 
     for(int i=0;i<array.length;i++){ 
      System.out.print(array[i]);   
     } 
     System.out.println(); 
    } 
} 

을 중복 코드를 방지하기 위해 참조, 다른 답변으로 제안 된대로 새 배열을 만드십시오.

관련 문제