2014-01-25 3 views
0

좋아, 나는 그 문제를 오해하고 있었다. 그것을 읽은 후 두 번 나는 randInt 실제로 배열 자체를 채우는 데 사용하는 방법입니다. 그래서 randInt을 호출 할 때 재귀 호출이라고 생각합니다. 이것은 어쨌든 다음과 같이 보여야합니다 :배열의 참조를 바꾸기

static int[] randInt(int i, int j) { 
    int[] temp = new int[(j - i) + 1]; 
    for (i = 0; i < j; i++) { 
     temp[i] = i + 1; // here i populate the array 
    } 
    System.out.println(Arrays.toString(temp)); // this prints [1, 2, 3, 4, 5] 
    for (i = 1; i < j;i++){ 
     swapReferences(temp[i], temp[randInt(0,i)]); //this is some sort of recursive call that swaps the references 
     // btw that statement does not compile, how can i pass a method as a parameter? 



    } 
    return temp; 
} 

static void swapReferences(int a, int b) { //these parameters are wrong, need to be changed 
    //Method to swap references 

} 

죄송합니다.하지만 나는 그것이 올바르게되어야한다고 생각합니다.

+0

@SotiriosDelimanolis되지는 다른 문제를 교환 할 수 있습니다. – user1404664

+3

당신은 그렇게 생각할 것입니다, 그러나 당신은 틀릴 것입니다. –

+0

다른 _scenario_, 같은 문제가 발생했습니다. – csmckelvey

답변

2

Java는 값에 의해 전달되므로 매개 변수를 다시 할당하면 작동하지 않습니다.

은 무엇 당신이해야하는 매개 변수로 배열 자체와 두 개의 정수 인덱스 것입니다 :

int randInt = generate.nextInt(j-i) + 1; //this is gonna generate a # within the range of the array (so if array is size 5, generates something 1-5) 
for (i = 1; i < j;i++){ 
     swapReferences(temp, i, randInt); //and this is my attempt at swapping the references 
     randInt = generate.nextInt(i) + 1 ; 
    } 

    static void swapReferences(int[] array, int a, int b){ 
    int x = array[a]; 
    array[a] = array[b]; 
    array[b] = x; 

} 

당신을 수 등 여기 수행되고 같은 방법으로 전달 된 배열로의 mutate 매개 변수 만 매개 변수 자체를 재 지정할 수 없습니다.

+0

아, 너는 나보다 더 빠르고 더 간결했다 +1! – mdewitt

+0

이것은 올바르게 작동하지만, 어떤 이유로 든 책이 다른 방식으로 구현되기를 원합니다. 원래 게시물을 편집하여 요청 된 내용을 정확히 볼 수 있습니다. – user1404664

+1

이것은 반드시 귀하의 도서에 대한 경우는 아니지만, 제가 대학에 있었을 때 제가 수업을 위해 가지고 있던 책의 일부 코드가 서면으로 작동하지 않았던 것을 기억합니다. C에서 Java로 명확하게 번역 된 한 권의 책을 기억하지만 가난하게. 이렇게 많은 방법들이 약간의 조작 없이는 작동하지 않았습니다. – mdewitt

2

a 및 b가 가리키는 int는 변경하지만 배열이 가리키는 표시는 변경하지 않습니다. 당신은 입력으로 배열을 당신의 swapReferences 방법을 변경해야하고, 모든 인덱스와 같은 무언가가

static void swapReferences(int[] arr, int indexA, int index B){ 
    int x = arr[indexA]; 
    a = arr[indexB]; 
    b = x; 
    arr[indexA] = a; 
    arr[indexB] = b; 
} 

또는

static void swapReferences(int[] arr, int indexA, int indexB){ 
    int x = arr[indexA]; 
    arr[indexA] = arr[indexB]; 
    arr[indexB] = x; 
} 
관련 문제