2016-11-04 2 views
-4

아래의 코드는 주사위를 시뮬레이트합니다. 두 주사위가 일치하는 횟수에 관심이 있습니다. 아이디어는 처음에 0과 1을 인쇄하여 얼마나 자주 발생하는지 보여줍니다. 다음 때 "double"을 얻었던 배열을 출력하기 위해, 예 : 첫 번째는 첫 번째 double 앞에 쓰레드의 수인 3을 포함한다. 제한은 사용자가 주어진 45가 끝내도록한다. 프로그램.배열에 대한 잘못된 출력

public static void main(String[] args) { 
    int limiteDoublons = Integer.parseInt(JOptionPane.showInputDialog("Nombre lancer: ").trim()); 
    int[] t = new int[limiteDoublons]; 
    int d1 = 0; 
    int d2 = 0; 
    int nbDoublons = 0; 
    int nbLancer = 0; 
    do { 
     for(int x = 0; x<limiteDoublons;x++){ 
      //shuffle 
      d1 = (int)(Math.random() * 7) + 1; 
      d2 = (int)(Math.random() * 7) + 1; 
      //si doublon print 1 et augmente le nbDoublon 
      //donne la valeur du tableau suivante ;a valeur de nblancer 
      if(d1 == d2) { 
      System.out.print("1"); 
      nbDoublons++; 
      t[x] = nbLancer; 
      } 
      else { 
      System.out.print("0"); 
      } 
      if ((nbLancer + 1) % 20 == 0) { 
       System.out.println(); 
      } 
      nbLancer++; 
     }   
    } while (nbDoublons < limiteDoublons); 

    System.out.println("\nOrdre des boulons: "); 
    Arrays.sort(t); 
    for (int i = 0; i < limiteDoublons; i++) { 
     System.out.printf("%1$4d", t[i]); 
     if ((i + 1) % 10 == 0) 
      System.out.println(); 
    } 
} 
} 

출력 :

10001101100000000000 
01001100000000000000 
00000000000000000000 
00101100010100110010 
00000000000000100000 
00001100010010000000 
00000000100000000000 
00001000000000000000 
01000100000011000101 
00000010001000000100 
00000001000000000100 
01010000000000100001 
01100100100000001000 
10000000001010010000 
00001000000000000000 
000000000100000 
Ordre des boulons: 
    0 0 0 0 0 0 0 0 0 0 
    0 7 8 21 25 69 74 78 94 105 
109 112 161 165 173 177 179 186 190 207 
217 221 223 234 241 242 245 248 256 260 
270 272 275 284 309 

은 무엇 예기치 않은 것은 "질서 데 boulons"다음 0입니다. 그것은, 내가 던져 공 등등에서 처음으로 더블을 얻을 것입니다 의미 ... 당신은 당신이 을 던졌습니다 계산되는 인덱스 x에서 배열을 업데이트하고 있기 때문에 모든 0을 받고있어

+4

의 사용 가능한 복제 http://stackoverflow.com/questions/40412988/array-issue-cant-solve-it-java ([배열 문제, 자바를 해결할 수없는]) – shmosel

+0

예, 맞습니다. 다시 묻습니다.하지만 그 대답은 더 정교합니다. 나는 대답을 얻으려고합니다. 아무도 나에게 줄 수 없나요? – NewBie1234

+0

왜 모두 0입니까? 랜덤 결과가 일치하지 않으면 배열 t에 아무 것도 지정하지 않았기 때문입니다. –

답변

1

을 나던 아니 은 두 배로입니다. 대신 nbDoublons를 사용해야합니다

t[nbDoublons] = nbLancer; 
nbDoublons++; 
+1

사실, nbLancer는 던지기를 세고 있습니다. 'x'는 주어진 라운드에 대한 배열 인덱스입니다. – Andreas

+0

스레드 "main"에서 예외가 발생했습니다. java.lang.ArrayIndexOutOfBoundsException : 45 \t at Lab08D.main (Lab08D.java:22) – NewBie1234

+0

@ dtrembl5 'x'루프를 버리면 사라집니다. – Andreas