2014-12-11 2 views
0

제 2d 배열의 열을 무작위로 순서를 변경하려고합니다. 지금까지 제대로 작동하지 않습니다. 누구든지 내가 그것을 변화시키기 위해서 무엇을 바꾸어야 하는지를 보여 주면 매우 감사 할 것입니다. 열은 현재 1 - 6의 순서이지만 주문을 무작위로 추출하려고합니다.임의 순서로 열 순서 변경

package assignment8; 

/** 
* 
* @author kozit015 
*/ 
import java.util.Arrays; 
import java.util.Random; 
public class Assignment8 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

}public static void jackknife(){ 
    int[]a= {1, 1, 0, 1, 0, 0}; 
    int[]b= {0, 0, 1, 0, 1, 1}; 
    int[]c= {1, 1, 1, 1, 1, 1}; 
    int[]d= {0, 0, 0, 0, 1, 1}; 
    int[] newArray = new int[a.length + b.length + c.length]; 
    System.arrayCopy(a, 0, newArray, 0, a.length); 
    System.arrayCopy(b, 0, newArray, a.length, b.length); 
    System.arrayCopy(c, 0, newArray, a.length + b.length, c.length); 

    shuffleArray(arrayCopy); 
    for (int i = 0; i < arrayCopy.length; i++) 
{ 
    System.out.print(arrayCopy[i] + " "); 
} 


    int newArray2d[][] = new int[5][4]; 
    for(int i=0; i<5;i++) 
     for(int j=0;j<4;j++) 
     newArray2d[i][j] = array1d[(j*10) + i]; 



}static void shuffleArray(int[] ar){ 

    Random rnd = new Random(); 
    for (int i = ar.length - 1; i > 0; i--) 
    { 
     int index = rnd.nextInt(i + 1); 

     int a = ar[index]; 
     ar[index] = ar[i]; 
     ar[i] = a; 
    } 

은}
}

+1

가 왜'List' 통해 이동 및 사용하지'Collections.shuffle()'? – fge

+0

학교 일이나 그가 사용할 수없는 목록 일 수 있습니다. – user3437460

답변

0

당신이 2 차원 배열로 배열 할 경우 더, 당신은 루프와 셔플 수 있습니다.

int[][] myArray = { {1,2,3}, {4,5,6}, {7,8,9} }; 

2D 배열을 만든 후에 수동으로 셔플 링하는 대신 루프를 사용하여 셔플 할 수 있습니다. 코드의

Random rnd = new Random(); 

//shuffle rows/cols 
for(int x=0; x<myArray.length; x++) 
{ 
    int idx = rnd.nextInt(myArray.length); 
    if(idx != x){ 
     int[] temp = myArray[x]; 
     myArray[x] = myArray[idx]; 
     myArray[idx] = temp; 
    } 
} 

테스트 :

for(int x=0; x<myArray.length; x++){ 
    for(int y=0; y<myArray[0].length; y++) 
     System.out.print(myArray[x][y]); 
    System.out.println(""); 
} 

출력 :

4 5 6 
7 8 9 
1 2 3 
+0

랜덤 생성 된 인덱스가'x'와 같으면 최적화하고'continue' 할 수 있습니다 – fge

+0

@fge 처음에는 간단하고 간단한 해결책을주고 싶었습니다. 따라서 OP가 이해하기가 더 쉽습니다. 어쨌든, 나는 그 조건을 추가했습니다. – user3437460

+0

괜찮습니다.)'idx == x continue; '라고 쓰여 있었 겠지만, 그 대신 환경 설정의 문제입니다. 궁극적으로 JIT는 동일한 코드를 컴파일합니다. – fge