2016-02-14 2 views
0

У меня небольшие проблемы с моей программой, я должен оценить pi через серию испытаний бросания дротиков на круглой доске радиуса 1. Где я столкнулся с проблемой, когда я попытайтесь скомпилировать его, появляется ошибка «не может найти символ - переменная X». Я не знаю, почему это происходит, я знаю, что эта ошибка возникает, когда что-то написано неправильно, но я знаю, что я не пропустил X. Если вы можете помочь, я бы очень это оценил!Невозможно найти символ - переменная X Java

/** 
* The purpose of this program is to calculate pi by throwing darts 
* 
* 
* 
*/ 
import java.util.Scanner; 

public class Darts 
{ 
    //create an array length number of darts for x and y 
    //method to generate random numbers 
    //calc pi = 4 hits/attempts 
    //method to print 

    public static int dartHit (double X, double Y, int hit) 
    { 
     X = Math.random(); 
     Y = Math.random(); 
     hit = 0; 
     if (Math.pow(X, 2) + Math.pow(Y, 2) <= 1) 
     { 
      hit++; 
     } 
     return hit; 
    } 

    public static double calcPi (int hit, int attempts, double pi) 
    { 
     pi = 4 * ((hit * 1.00)/(attempts * 1.00)); 
     return pi; 
    } 

    public static void main(String[ ] args) 
    { 
     Scanner in = new Scanner(System.in); 

     System.out.println("How many darts per trial? "); 
     int attempts = in.nextInt(); //(N) 
     System.out.println("How many trials?"); 
     int trials = in.nextInt(); 

     double [] pies = new double [trials]; 
     double sum = 0.0; 

     for (int j = 0; j < trials; j++) 
     { 
      for (int i = 0; i < attempts; i++) 
      { 
       int dartHit = dartHit (X, Y, hit); 
       double calcPi = calcPi(hit, attempts, pi); 
       sum += calcPi; 
      } 
      double average = sum/attempts; 
      pies [j] = average; 
     } 

     for (int k = 0; k < pies.length; k++) 
     { 
      System.out.printf("Trial [" + k +"]: pi = " + "%8.6f \n", pies [k]); 
     } 
    } 
} 
+0

'INT dartHit = dartHit (X, Y, удар),' здесь как 'x' и' Y' не доступны для 'Main()' оба являются локальными переменными в методе 'dartHit()'. – Satya

ответ

0

Проблема заключается в том, что метод main() не знает переменные X, Y, hit, pi и т. Д .; которые определены другими способами. Таким образом, вы получаете символ «не можете найти символ» для этих строк. Возможно, вам захочется прочитать объем переменных.

Вот переработан версия кода:

import java.util.Scanner; 

public class Darts 
{ 
    //create an array length number of darts for x and y 
    //method to generate random numbers 
    //calc pi = 4 hits/attempts 
    //method to print 

    public static int dartHit (double X, double Y, int hit) 
    { 
     if (Math.pow(X, 2) + Math.pow(Y, 2) <= 1) 
     { 
      hit++; 
     } 
     return hit; 
    } 

    public static double calcPi (int hit, int attempts, double pi) 
    { 
     pi = 4 * ((hit * 1.00)/(attempts * 1.00)); 
     return pi; 
    } 

    public static void main(String[ ] args) 
    { 
     Scanner in = new Scanner(System.in); 

     System.out.println("How many darts per trial? "); 
     int attempts = in.nextInt(); //(N) 
     System.out.println("How many trials?"); 
     int trials = in.nextInt(); 

     //Initialize variables 
     double X = Math.random(); 
     double Y = Math.random(); 
     int hit = 0; 

     double [] pies = new double [trials]; 
     double sum =0.0, pi = 0.0; 

     for (int j = 0; j < trials; j++) 
     { 
      for (int i = 0; i < attempts; i++) 
      { 
       int dartHit = dartHit (X, Y, hit); 
       double calcPi = calcPi(dartHit, attempts, pi); 
       sum += calcPi; 
      } 
      double average = sum/attempts; 
      pies [j] = average; 
     } 

     for (int k = 0; k < pies.length; k++) 
     { 
      System.out.printf("Trial [" + k +"]: pi = " + "%8.6f \n", pies [k]); 
     } 
    } 
} 
+0

Это избавляет от ошибки, но мой результат заканчивается чтением 0.000000 для каждого испытания, потому что теперь все переменные равны нулю. –

+0

Я не вижу такой проблемы. – Bajal

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