2016-11-04 3 views
-4

Код, изображенный на рисунке ниже, имитирует кости, меня интересует количество совпадений двух кубиков, и идея состоит в том, чтобы сначала распечатать 0 и 1, чтобы показать, как часто это происходит. Затем, чтобы напечатать массив, который должен содержать, когда был получен «double», ex: первый будет содержать 3, то есть число бросков до первого двойного ... предел дат говорит 45, предоставленный пользователем, программа.Неправильный вывод для массива, java

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 

Что является неожиданным является 0 следующая "Орден boulons". Оно не имеет смысла, что я хотел бы получить свой первый дубль в броске 0 и так далее ...

+4

Возможный дубликат [выпуска массива, не может решить эту проблему Java] (http://stackoverflow.com/questions/40412988/array-issue-cant-solve-it-java) – shmosel

+0

Да, вы правы, я спрашиваю его снова, но его более подробно, и я пытаюсь получить ответ, может ли кто-нибудь дать мне его? – NewBie1234

+0

Почему все нули? Потому что вы не присвоили ничего массиву t, когда случайные результаты не совпадают. –

ответ

1

Вы получаете все нули, потому что вы обновляете массив с индексом x, который рассчитывает бросает, не дубль. Вы должны использовать 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

Смежные вопросы