문제는 Random 이 같은숫자가 나온다는겁니다..
아래의 함수는요 블럭을 가져오는 함수입니다..
public Block getBlock(){
if(nowblock == null)
{
nowblock = new Block();
for(int i=0 ; i<10000;i++);
}
else nowblock = nextBlock;
return nowblock;
}
우선 위소스를 보시면 처음에 nowblock 값이 null 입니다..(처음만) 그래서 nowblock = new Block(); 호출을 하죠..
그리고난후 nextblock = new Block(); 도 호출을 하고요..
결국 Block(); 매서드를 두번 호출한 셈이죠~
허나..아래 소스를 보면요.. Block(); 매서드에.. random 변수가 있죠.. cell[i] = 랜덤숫자가 들어가게한 매서드입니다..
각 cell[0]cell[1]cell[2] 는 다릅니다.. 하지만..
저 위에 보시다시피.. nowblock = new Block(); 한거랑 nextblock = new Block(); 도 달라야 하지 않습니까? -_-;;
근대요... 같습니다..random숫자가 -_-;; 다시 말하자면
nowblock 에 들어간 cel[0]cell[1]cell[2] 랑 nextblock cell[0]cell[1]cell[2] 가 cell[0] == cell[0] 처럼 각각 같습니다..;;
어찌 해야 하나요 -_-;
public Block(){
Random random = new Random();
int celltype1,celltype2,celltype3;
cell = new int[3];
for(int i = 0 ; i<3 ; i++)
cell[i] = NOCELL;
celltype1 = ((int)(Math.abs(random.nextInt())%5))+1;
celltype2 = ((int)(Math.abs(random.nextInt())%5))+1;
celltype3 = ((int)(Math.abs(random.nextInt())%5))+1;
cell[0] = celltype1;
cell[1] = celltype2;
cell[2] = celltype3;
}
첫댓글 자바 API를 살펴보니까요 randon클래스의 컨스트럭터는요 디폴트로 현재 시간에 의해 씨드를 배정받는다는군요..한번씨드를 배정받으면 순차적으로 정해진 랜더넘버를 가지게 되다는것 같더라구요 만약 두 객체가 같은 밀리초에 생성이 되었다면 같은 씨드를 배정받고 같은 랜덤넘버를 가지게 되는거죠...
그것이 아니라면 코드상에 논리적인 오류가 잇는것인데 지금 코드는 ;;;먼가 2%부족한듯하네요 -_- 이해가 안되요 쌩뚱맞게 for(int i=0 ; i<10000;i++); <<<이런것이 있는것도 혹 시간딜레이를 주신것? (다른밀리초;;) 그렇고 설명하신부분에 대한 내용은 코드에 제대로 나타나있지 않네요...
혹시 nowblock = nextBlock <<<요런부분을 실수하셔서 서로 다른 두 객체가 같아지는것은 아닐가요????