Ошибка ArrayIndexOutOfBoundsException в файле дартс

1

Цель этой программы - найти оценку pi. Сначала он работал, но значения были слишком большими (20,30,40,etc) И теперь он даже не компилируется. Я получаю ошибку ArrayIndexOutOfBoundsException. Как бы вы продолжали исправлять код? Благодарю.

    import java.util.Scanner;
    import java.lang.Math;
    import java.util.Random;
    import java.io.File;
    import java.io.IOException;
     public class Darts
    {   
     public static double[] getPi(double[] pi, int trials, int times, int counter)
     {
       for (int loop = 0; loop < trials; loop++)
     {
       for (int r = 0; r < times; r++)
       {
       double x = Math.random(); 
       double y = Math.random(); 


       if (Math.pow(x,2) + Math.pow(y,2) <= 1)
       {
         counter++;
       }


       }
       pi[trials] = 4 * (double) counter / times;

     }
       return pi;
     }
    public static void printResults(double[] pi, int trials, double average)
      {
        for (int x = 0; x < trials; x++)
      {
        System.out.println("Trial [ " + x + "]: pi = " + pi[x]);                                             
      }
        System.out.println("Estimate of pi = " + average ); 
      }

      public static void main (String [ ] args) throws IOException
      { 
      Scanner in = new Scanner(System.in);
      int counter = 0;
      double y = 0;
      double x = 0;  
      double radius = 1.0;
      Random randNumList = new Random(); 


     System.out.println("How many times darts should be thrown in a trial?");
     int times = in.nextInt();

     System.out.print("How many trials will there be?");
     int trials = in.nextInt();
     System.out.println(" " + trials + " trials");

     double pi[] = new double[trials];
     pi = getPi(pi, times, trials, counter);

     double sumPi = 0.0;
     for (int l = 0; l < trials; l++)
     {
       sumPi += pi[l];
     }
     double average = sumPi/counter;
     printResults(pi, trials, average);


    }
  }
  • 2
    Используйте отладчик, чтобы точно определить, где индекс массива выходит за границы. Также попробуйте исправить форматирование кода, это очень трудно читать
  • 0
    Это не компилируется? Или это дает ArrayIndexOutOfBoundsException ? Вы не можете иметь оба. Если он компилируется нормально, то я бы рекомендовал пройтись по нему с помощью отладчика, чтобы увидеть, что происходит не так. Я уверен, что вы сразу увидите свою ошибку.
Показать ещё 6 комментариев
Теги:
random

1 ответ

1
Лучший ответ

Ваша строка здесь:

pi[trials] = 4 * (double) counter / times;

должно быть:

pi[loop] = 4 * (double) counter / times;
  • 0
    Спасибо! Теперь я получаю большие значения. как я могу это исправить?
  • 0
    Давайте разберемся с одним вопросом за раз в каждом вопросе здесь. С помощью работающего кода вы сможете лучше его отладить .... но, как подсказка, каково значение 'counter' и что вы с ним делаете?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню