2013-08-28 1 views
0

이 사람이 나에게 설명해 주시겠습니까 최종 int 배열을 조작한다?방법 반환 null가

final int [] vals = {2,3}; 
int [] vals2 = multiply(vals); 

for(int i : vals) System.out.println(i); 


int [] multiply(int [] in){ 
    for(int i = 0; i < in.length;i++){ 
     in[i] *= 2; 
    } 
     return null; 
} 

OUPUT :
4
6

편집 : 배열을 반환하는 방법 만이 문제를 발견했습니다
. 원래의 정수 값을 변경하지 않습니다 int를 반환 동일한 방법 ...

전체 코드 :

public class Main{ 
    public Main(){ 
     int [] myList = {56, 32, 200}; 
     int [] newList = myList; 
     bubble_sort(newList); 

     for(int i : myList){ System.out.println(i); } 
     System.out.println(); 
     for(int i : newList){ System.out.println(i); } 
    } 


    public int [] bubble_sort(int a[]){ 
     int n = a.length; 
     int [] s = a; 

     for (int i = 0; i < n ; i++){ 
       for (int j = n - 1; j >= (i+1); j--){ 
        if (s[j - 1] > s[j]){ 
         int t = s[j - 1]; 
         s[j - 1] = s[j]; 
         s[j] = t; 
        } 
       } 
     } 
     return null; 
     // return s; 
    } 


    public static void main(String [] args){ 
     new Main(); 
    } 
} 

편집 :
다음 코드는 예상대로 다음과 같은 출력을 생성 : 2, 4

int vals = 2; 
int vals2 = multiply(vals); 
System.out.println(vals); 
System.out.println(vals2); 
int multiply(int in){ return in*2; } 

내 질문에, int를 반환하는 메서드는 입력 값을 변경하지 않지만 배열을 반환하는 메서드는 입력 원래 값을 변경하지 않는 이유는 무엇입니까?

+0

실제로 곱하기를 호출하면 결과가 의미가 있다고 생각합니다. 당신이 제공 한 엄격한 예제에서 출력은 2, 3이되어야합니다. 그러나 곱하기를 먼저 호출하면 제안 된 결과를 얻게됩니다 – Cruncher

+0

코드에서 myList와 newList는 동일한 배열을 참조하므로 하나를 변경합니다 그들 중 다른 하나도 바뀝니다. – arshajii

답변

3

여기에서 finalvals 참조가 초기 배열을 참조하는 것으로부터 변경할 수 없음을 의미합니다. 그러나 배열의 내용을 변경할 수 있는지 여부에 대해서는 아무 것도 말하지 않습니다. 보시다시피, 그들은 바뀔 수 있습니다.

final 키워드는, 예를 들어, vals에 다른 배열을 할당에서 당신을 막을 것

vals = anotherArray; // Disallowed; final 

독방 return null;은 쓸모가 없습니다. multiply 메서드는 void으로 선언되어야하며 아무 것도 반환하지 않습니다.

+0

네, 그 쓸모없는 걸 압니다. 그러나 null을 리턴하지 않는 메소드를 리턴하는 이유는 무엇입니까? – domizai

+0

@domizai 예를 게시하십시오. – arshajii

+1

@domizai'vals2' _is_'null'을 찾을 것입니다. – rgettman

1

배열은 자바

은 "최종"키워드뿐만 아니라 실제 값을 변경, 재 할당에서 당신을 중지

에서 변경할 수 있습니다. 문자 그대로 "in = someOtherArray"를 코드의 어딘가에서 작성하면 컴파일 오류가 발생한다는 것을 의미합니다. 이는 "최종"키워드 같은 소리한다

쓸모가 있지만, 원시 형, 또는 불변 객체에 대해 예상대로 작동합니다. 만약 내가

: 0 = 난을 int로; 값을 i에 재 할당하지 않고는 0을 변경할 수 없습니다.

0

는 null을 반환하는 방법을 볼 수 있지만, 배열의 내용이 여전히 곱셈() 메소드 내에서 수정 얻고있다.

multiply(vals); 

(I : INT 발스) 미국에서 System.out.println (Ⅰ); 이미 곱셈 방법으로 수정 된 발스을 인쇄

참고. 말 그대로 싶어이 방법 int [] newList = bubble_sort(myList);를 사용할 때 (자바 패스에 의한 값)

+0

하지만 int-return-method를 사용하면 입력 원래 값이 수정되지 않습니다. array-int-return-method는 입력 원래 값을 수정합니다. – domizai

+0

원래 배열을 수정하지 않고 배열의 각 항목을 곱하여 새로운 배열에 저장하기 만하면됩니다. 물론 나는 이것처럼 sty 할 수있다 : newArray [i] = vals [i] * 2; 그러나 나는 여전히 이것을위한 방법을 선호한다. – domizai

0

그래서 내가 입력 값을 수정하지만 새로운 배열
int [] s = new int[a.length]; for (int i = 0; i < n ; i++)s[i] = a[i];
을로 각 항목을 저장 한 후 나는 새로운 배열과 수익을 정렬 계속 안 그것. 그런 다음 원래 배열 (myList)은 영향을받지 않습니다.

관련 문제