2016-08-15 2 views
0

Приведенный ниже код дает вам номер, близкий к pi при запуске программы. Требуется ввести пользователя для количества дротиков, которые вы хотите бросить за испытание, и использует это, чтобы придумать число, близкое к pi. Мне нужно сделать код запущенным для определенного количества проб, но не может показаться, что он работает. Как мне это сделать?Как сделать цикл повторить еще один цикл?

System.out.print("How many darts per trial? "); 
    int darts = in.nextInt(); 
    System.out.print("How many trials? "); 
    int trials = in.nextInt(); 

    //The code below this represents 1 trial 
    for(int i = 0; i < darts; i++) 
    { 
     xInt[i] = (Math.random() * (upper - lower)) + lower; 
     yInt[i] = (Math.random() * (upper - lower)) + lower; 
     c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2); 
     c[i] = Math.sqrt(c2[i]); 

     if(c[i] <= 1) 
     { 
      hits++;     
     }      
    } 
    double answer = 4 * ((double)hits/(double)darts);    
    System.out.println(answer); 

Если бы я добавил для цикла для испытаний (см ниже), то он складывает все ответы и печатает сумму

for(int n = 0; n < trials; n++) 
    { 
     for(int i = 0; i < darts; i++) 
     { 
      xInt[i] = (Math.random() * (upper - lower)) + lower; 
      yInt[i] = (Math.random() * (upper - lower)) + lower; 
      c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2); 
      c[i] = Math.sqrt(c2[i]); 
      if(c[i] <= 1) 
       hits++; 
     } 
    } 

    double answer = 4 * ((double)hits/(double)darts);    
    System.out.println(answer); 

Он должен напечатать что-то вроде этого, когда вы завершены.

Trial [1]: pi = 3.11341744 
Trial [2]: pi = 3.04824237 
Trial [3]: pi = 3.33281081 
Trial [4]: pi = 3.40901039 
+0

Увеличить значение переменной 'дартс'? –

+0

_... внутри другого для цикла, но это не работает »_ - Покажите, что вы сделали, и объясните, что не работает. Пожалуйста, прочитайте [ask] и посетите [help], чтобы узнать, как использовать этот сайт. –

+0

Чтобы уточнить - это оценка Монте-Карло pi, у которой у вас есть определенное конкретное количество дротиков, которое вы хотите запустить * N * раз, или это то, что вы хотите добавить больше дротиков? – Makoto

ответ

1

Вам необходимо сбросить количество обращений за каждым испытанием, добавив хиты = 0; сразу после испытаний для цикла Кроме того, переместите ваш расчет и инструкцию печати внутри цикла for. Как это:

for(int n = 0; n < trials; n++) 
{ 
    hits=0; 
    for(int i = 0; i < darts; i++) 
    { 
     xInt[i] = (Math.random() * (upper - lower)) + lower; 
     yInt[i] = (Math.random() * (upper - lower)) + lower; 
     c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2); 
     c[i] = Math.sqrt(c2[i]); 
     if(c[i] <= 1) 
      hits++; 
    } 
    double answer = 4 * ((double)hits/(double)darts);    
    System.out.println(answer); 
} 

Это должно исправить это, если я правильно понять вас.

+0

Спасибо вам большое! – Maya