2014-06-13 2 views
0

1부터 3까지의 정수를 완전히 무작위로 다차원 배열의 1 행을 채워야합니다. 예 : 그 행을 인쇄 할 경우이 주고 : 1 2 2 1 2 3 1 2 3특정 난수로 배열을 채우는 법 (자바)

이제

내가 다음과 같은 생각이 작업을 수행하는 코드는 작동합니다 :

private void fillArray() 
    { 
     for(int i=0; i<10;i++) 
     { 
     PincodeRandom[0][i]=i; 
     PincodeRandom[1][i]= (int)Math.random()*3 +1; 
     } 
    } 

그러나이로 결과 두 번째 행 전체를 1 (임의의) 정수로 채 웁니다. 어떻게 해결할 수 있습니까?

+0

의무적 [XKCD] (http://www.xkcd.com/221/) – clcto

+0

당신은 ... 의 결과 내가 간단한 수학을 엉망 맞아 프로그래밍 하루 종일 – user3401578

답변

0

(int) 3으로 곱 전에 0으로 Math.random() 캐스팅 것입니다 ...이보십시오. 당신이 Random 클래스를 사용하려는 경우

(int)(Math.random()*3) + 1; 
-1

그 이유 (INT) 인 Math.random() 인 Math.random()가 항상 대신 0 inbetween 및

1. java.util.Random의를 가져 더블이기 때문에, 그것은 0을 동일하게 일으키는 수업.

과 같이 사용할 수 : 새로운 랜덤() nextInt (2) +1

+1

하지만 시드는 일반적으로 시스템 시간을 기준으로 계산되므로 이것은 엄격한 루프에 있습니다. – clcto

+0

아니면 적어도'(int)'를 적용하기 전에'Math.random() * 3' 주위에 괄호를 써야합니다. –

+0

이 작동합니다! 대단히 감사합니다! – user3401578

0

결과,

Random r = new Random(); 
for(loop){ 
    PincodeRandom[1][i]= = r.nextInt(4 - 1) + 1; 
} 
1

것은 쉬르합니다 0 * 3 + 1 항상 1. 시도이다 예를 들어 new Random()은 시스템 시간을 시드로 사용하기 때문에 루프의 외부에 인스턴스를 만듭니다. 따라서 동일한 틱에서 두 개의 무질서가 생성되면 동일한 난수 시퀀스가 ​​생성됩니다.

private void fillArray() 
{ 
    Random rand = new Random(); 
    for(int i=0; i<10;i++) 
    { 
    PincodeRandom[0][i]=i; 
    PincodeRandom[1][i]= rand.nextInt(2) + 1; 
    } 
} 
0

이 시도 :

import java.util.Random; 


public class Test { 
public static void main(String[] args){ 
    int[][] array = new int[2][10]; 
    Random rand = new Random(); 
    for(int i=0; i<10;i++) 
    { 
    array[0][i]=i; 
    array[1][i]= (int)rand.nextInt(3) +1; 
    } 
    for (int j=0;j<10;j++){ 
    System.out.println(Integer.toString(array[1][j])); 
    } 
} 
} 
관련 문제