Невозможно вызвать метод, пытаясь получить переменную из одного метода в другой - PullRequest
0 голосов
/ 08 февраля 2020

Я застрял, пытаясь вызвать метод. Независимо от того, что я делаю, я получаю сообщение об ошибке, что он не может найти символ. Я пытаюсь использовать переменные total (из метода surfaceArea) и volume (из метода volume).

Проблемы заключаются в методе toString, где он не может видеть переменные независимо от того, что я делаю. Я уверен, что это что-то невероятно основополагающее c Я отсутствует, поэтому я надеюсь, что кто-то может это выяснить.

Вот журнал ошибок:

Ellipsoid.java:176: error: cannot find symbol
     String vout = df.format(volume);
                             ^
 symbol:   variable volume
 location: class Ellipsoid
Ellipsoid.java:177: error: cannot find symbol
     String sout = df.format(total);
                             ^
 symbol:   variable total
 location: class Ellipsoid
2 errors

А вот код сам. Я попытался сделать его максимально легким для чтения:


/**
* This program lets the user enter values of and Ellipsoid. 
* @version 02/05/2020
*/
public class Ellipsoid {

// fields

   private String label;
   private double a, b, c;
   //public double total, volume;
// constructor
/**
* This constructor creates a ellipsoid and gets its information.
*
* @param labelIn is the label entered by the user.
* @param aIn is the a valuve entered by the user.
* @param bIn is the b valuve entered by the user.
* @param cIn is the c valuve entered by the user.
*/
   public Ellipsoid(String labelIn, double aIn, double bIn, double cIn) {
      setLabel(labelIn);
      setA(aIn);
      setB(bIn);
      setC(cIn);
   }
// methods
/**
* This method gets the label string.
* @return returns the label of the ellipsoid.
*/
   public String getLabel() {
      return label;
   }
     /**
* This method sets the label of the ellipsoid.
* @param labelIn is the label entered by the user.
* @return returns true or false depending on user input.
*/
   public boolean setLabel(String labelIn) {
      if (labelIn == null) {
         return false;
      }
      else {
         label = labelIn.trim();
         return true;
      }
   }
     /**
* This method gets the a values of the ellipsoid.
* @return returns a values of the ellipsoid.
*/
   public double getA() {
      return a;
   }
     /**
* This method sets the a value of the ellipsoid.
* @param aIn is the a value entered by the user.
* @return returns true or false depending on the user input.
*/
   public boolean setA(double aIn)
   {
      if (aIn > 0)
      {
         a = aIn;
         return true;
      }
      else 
      {
         return false;
      }
   }
     /**
* This method gets the b value of the ellipsoid.
* @return returns the b value of the ellipsoid.
*/
   public double getB()
   {
      return b;
   }
     /**
* This method sets the b value of the ellipsoid.
* @param bIn is the b value entered by the user.
* @return returns true or false depending on the user input.
*/
   public boolean setB(double bIn)
   {
      if (bIn > 0)
      {
         b = bIn;
         return true;
      }
      else
      {
         return false;
      }
   }

 /**
* This method gets the c value of the ellipsoid.
* @return returns the c value of the ellipsoid.
*/

   public double getC()
   {
      return c;
   }
     /**
* This method sets the c value of the ellipsoid.
* @param cIn is the c value entered by the user.
* @return returns true or false depending on the user input.
*/
   public boolean setC(double cIn)
   {
      if (cIn > 0)
      {
         c = cIn;
         return true;
      }
      else
      {
         return false;
      }
   }

     /**
* This method finds the volume of the ellipsoid.
* @return returns the volume of the ellipsoid.

*/
   public double volume()
   {
      double volume = 4 * Math.PI * a * b * c;
      volume = volume / 3;
      return volume;
   }

/**
* This method finds the surface area of the ellipsoid.
* @return returns the surface area.
*/
   public double surfaceArea() {

      double ab = (a * b);
      ab = Math.pow(ab, 1.6);
      double ac = a * c;
      ac = Math.pow(ac, 1.6);
      double bc = b * c;
      bc = Math.pow(bc, 1.6);

      double top = ab + ac + bc;
      double bottom = top / 3;
      double full = bottom * 1 / 1.6;
      double total = 4 * Math.PI * full;
      return total;  

   }



     /**
* This method prints the information of the ellipsoid.
* @return returns the information of the ellipsoid.
*/
   public String toString() {
      DecimalFormat df = new DecimalFormat("#,##0.0###");
      surfaceArea();
      volume();

      String aout = df.format(a);
      String bout = df.format(b);
      String cout = df.format(c);
      String vout = df.format(volume);
      String sout = df.format(total);


      String output = "Ellipsoid \"" + label + "\" with axes a = " + aout
         + ", b = " + bout + ", c = " + cout + " units has:\n\tvolume = " 
         + vout + " cubic units\n\tsurface area = "
         + sout + " square units";
      return output;
   }

}

Ответы [ 2 ]

2 голосов
/ 08 февраля 2020

volume и total являются локальными членами для методов volume() и surfaceArea() соответственно. Это не видно в методе toString(). Но a, b и c видны, поскольку они объявлены на уровне класса. Попробуйте присвоить возвращаемые значения этих методов локальным переменным в toString(), как показано ниже:

public String toString() {
  DecimalFormat df = new DecimalFormat("#,##0.0###");
  double total = surfaceArea();
  double volume = volume();

  ....
  String vout = df.format(volume);
  String sout = df.format(total);
  ....
}
0 голосов
/ 08 февраля 2020

В классе Ellipsoid вы не объявляли переменные total и volume. Там они прокомментированы, попробуйте раскомментировать эту строку:

//public double total, volume;

Должно помочь, но если вы хотите присвоить значения этим полям экземпляра при вычислении, измените double total и double total в правильном методы this.total и this.volume.
Это позволит вам одновременно хранить данные внутри объекта и возвращать их через метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...