get total的Java方法在我的主方法中不起作用

get total的Java方法在我的主方法中不起作用,java,io,Java,Io,我的每月降雨计划的第2版,应用了编辑和建议。非常感谢你的帮助,这真的让我想到了。编程的奇妙之处在于完全陌生的人可以聚在一起解决问题 // Rainfall Class Start import java.util.Scanner; import java.io.*; import java.text.DecimalFormat; import java.util.Arrays; /** * * @author Adrian */ public class Rainfall{ D

我的每月降雨计划的第2版,应用了编辑和建议。非常感谢你的帮助,这真的让我想到了。编程的奇妙之处在于完全陌生的人可以聚在一起解决问题

// Rainfall Class Start 

import java.util.Scanner;
import java.io.*;
import java.text.DecimalFormat;
import java.util.Arrays;

/**
 *
 * @author Adrian
 */
public class Rainfall{
   DecimalFormat twoDecimals = new DecimalFormat("##0.00");
   private final String[] Months={"Jan","Feb","Mar","Apr","May","Jun",
                           "Jul","Aug","Sep","Oct","Nov","Dec"};;
   private final double[] Rainfall;

   public Rainfall() throws IOException
   {
      Rainfall = new double[12];
   }
   public double getAverageRainFall()
   {
      return getTotalRainFall() / 12 ;
   }
   public void outputToFile()throws IOException
       {
       try (PrintWriter outputFile = new PrintWriter("Months.txt")) {
           Scanner kb=new Scanner(System.in);

           System.out.println("For each month enter a rainfall amount");

           for (int i=0;i<12;i++)
           {
               System.out.println(Months[i]+"?");
               Rainfall[i]=kb.nextDouble();
               outputFile.println(Months[i]+" "+Rainfall[i]);
               System.out.println(Months[i]+" "+Rainfall[i]);
           }
       }
       } 

    /**
     *
     * @return 
     */
    public double getTotalRainFall()
   {
      double total = 0.0;  // Accumulator initialized to 0

      // Accumulate the sum of the rain array elements.
      for (int i = 0; i < Rainfall.length; i++)
         total += Rainfall[i];

      // Return the sum.
      return total;
   }
    public double getLowestMonth()
   {
      int lowest = 0;

      // Find the element with the lowest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] < Rainfall[lowest])
            lowest = i;
      }
      // Return the element number.
      return lowest+1;
      }
    public int getHighestMonth()
   {
      int highest = 0;

      // Find the element with the highest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] > Rainfall[highest])
            highest = i;
      }
      // Return the element number.
      return highest;
   }
    public void displayMessage(){
          System.out.println("----------------------");
          System.out.println("Monthly Rainfall Totals For 2014"); 
          System.out.println(Arrays.toString(Months));
          System.out.println(Arrays.toString(Rainfall));
          System.out.println("Average Rainfall = "  +getAverageRainFall());
          System.out.println("Total Rainfall   = "  +getTotalRainFall());
          System.out.println("Highest Month    = "  +getHighestMonth());
          System.out.println("Lowest Month     = "  +getLowestMonth());
          System.out.println("----------------------");
}
    public double getRainAt(int e)
   {
      return Rainfall[e];
   }
   }



  /*public void inputFromFile() throws IOException
   {
      File myFile=new File ("Months.txt");
      Scanner inputFile=new Scanner(myFile);

      //loop through the file

      for(int i=0;i<12;i++){
         Months[12] = inputFile.nextLine();
         inputFile.close();
      }
   }*/

我的每月降雨计划的第2版,应用了编辑和建议。非常感谢你的帮助,这真的让我想到了。编程的奇妙之处在于完全陌生的人可以聚在一起解决问题。

编译器实际上是对的,你不能从静态main调用非stati方法:,调用getTotalRainFall;以降雨为例

// Rainfall Class Start 

import java.util.Scanner;
import java.io.*;
import java.text.DecimalFormat;
import java.util.Arrays;

/**
 *
 * @author Adrian
 */
public class Rainfall{
   DecimalFormat twoDecimals = new DecimalFormat("##0.00");
   private final String[] Months={"Jan","Feb","Mar","Apr","May","Jun",
                           "Jul","Aug","Sep","Oct","Nov","Dec"};;
   private final double[] Rainfall;

   public Rainfall() throws IOException
   {
      Rainfall = new double[12];
   }
   public double getAverageRainFall()
   {
      return getTotalRainFall() / 12 ;
   }
   public void outputToFile()throws IOException
       {
       try (PrintWriter outputFile = new PrintWriter("Months.txt")) {
           Scanner kb=new Scanner(System.in);

           System.out.println("For each month enter a rainfall amount");

           for (int i=0;i<12;i++)
           {
               System.out.println(Months[i]+"?");
               Rainfall[i]=kb.nextDouble();
               outputFile.println(Months[i]+" "+Rainfall[i]);
               System.out.println(Months[i]+" "+Rainfall[i]);
           }
       }
       } 

    /**
     *
     * @return 
     */
    public double getTotalRainFall()
   {
      double total = 0.0;  // Accumulator initialized to 0

      // Accumulate the sum of the rain array elements.
      for (int i = 0; i < Rainfall.length; i++)
         total += Rainfall[i];

      // Return the sum.
      return total;
   }
    public double getLowestMonth()
   {
      int lowest = 0;

      // Find the element with the lowest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] < Rainfall[lowest])
            lowest = i;
      }
      // Return the element number.
      return lowest+1;
      }
    public int getHighestMonth()
   {
      int highest = 0;

      // Find the element with the highest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] > Rainfall[highest])
            highest = i;
      }
      // Return the element number.
      return highest;
   }
    public void displayMessage(){
          System.out.println("----------------------");
          System.out.println("Monthly Rainfall Totals For 2014"); 
          System.out.println(Arrays.toString(Months));
          System.out.println(Arrays.toString(Rainfall));
          System.out.println("Average Rainfall = "  +getAverageRainFall());
          System.out.println("Total Rainfall   = "  +getTotalRainFall());
          System.out.println("Highest Month    = "  +getHighestMonth());
          System.out.println("Lowest Month     = "  +getLowestMonth());
          System.out.println("----------------------");
}
    public double getRainAt(int e)
   {
      return Rainfall[e];
   }
   }



  /*public void inputFromFile() throws IOException
   {
      File myFile=new File ("Months.txt");
      Scanner inputFile=new Scanner(myFile);

      //loop through the file

      for(int i=0;i<12;i++){
         Months[12] = inputFile.nextLine();
         inputFile.close();
      }
   }*/
Edit1:谢谢,puj,修复了错误

Edit2:实际上,你的代码看起来有点混乱,那是什么类?你应该在那里降雨吗?以类似的方式结束:

RainFall rf=new RainFall();
rf.inputFromFile();
rf.getTotalRainFall();
rf.outputToFile();

Crystal,我能推荐你用从这些答案中得到的建议从头重写它吗

编译器实际上是对的,您不能从静态main调用非stati方法:,调用getTotalRainFall;以降雨为例

Edit1:谢谢,puj,修复了错误

Edit2:实际上,你的代码看起来有点混乱,那是什么类?你应该在那里降雨吗?以类似的方式结束:

RainFall rf=new RainFall();
rf.inputFromFile();
rf.getTotalRainFall();
rf.outputToFile();

Crystal,我能推荐你用从这些答案中得到的建议从头重写它吗

方法是对象的一部分,这就是为什么您需要对象的实例来调用他的方法,您可以在main中执行以下操作:

Rainfall r = new Rainfall();
r.getTotalRainFall();

方法是对象的一部分,这就是为什么您需要对象的实例来调用他的方法,您可以在main中执行以下操作:

Rainfall r = new Rainfall();
r.getTotalRainFall();

另外,你可能会想要改变

  for(int i=0;i<12;i++)
     Months[i]=inputFile.nextLine();
     inputFile.close();


获取正确的数据。

此外,您可能需要更改

  for(int i=0;i<12;i++)
     Months[i]=inputFile.nextLine();
     inputFile.close();

获取正确的数据。

公开双getTotalRainfall static

所以你可以用double totalRain=Rainfall.getTotalRainfall从main调用它

你将不得不让私人双[]降雨;还静,私静双[]雨

您应该为数组使用另一个名称,根据Java中的标准命名,您应该使用小写动词来声明字段。否则可能会导致问题。

公开双getTotalRainfall static

// Rainfall Class Start 

import java.util.Scanner;
import java.io.*;
import java.text.DecimalFormat;
import java.util.Arrays;

/**
 *
 * @author Adrian
 */
public class Rainfall{
   DecimalFormat twoDecimals = new DecimalFormat("##0.00");
   private final String[] Months={"Jan","Feb","Mar","Apr","May","Jun",
                           "Jul","Aug","Sep","Oct","Nov","Dec"};;
   private final double[] Rainfall;

   public Rainfall() throws IOException
   {
      Rainfall = new double[12];
   }
   public double getAverageRainFall()
   {
      return getTotalRainFall() / 12 ;
   }
   public void outputToFile()throws IOException
       {
       try (PrintWriter outputFile = new PrintWriter("Months.txt")) {
           Scanner kb=new Scanner(System.in);

           System.out.println("For each month enter a rainfall amount");

           for (int i=0;i<12;i++)
           {
               System.out.println(Months[i]+"?");
               Rainfall[i]=kb.nextDouble();
               outputFile.println(Months[i]+" "+Rainfall[i]);
               System.out.println(Months[i]+" "+Rainfall[i]);
           }
       }
       } 

    /**
     *
     * @return 
     */
    public double getTotalRainFall()
   {
      double total = 0.0;  // Accumulator initialized to 0

      // Accumulate the sum of the rain array elements.
      for (int i = 0; i < Rainfall.length; i++)
         total += Rainfall[i];

      // Return the sum.
      return total;
   }
    public double getLowestMonth()
   {
      int lowest = 0;

      // Find the element with the lowest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] < Rainfall[lowest])
            lowest = i;
      }
      // Return the element number.
      return lowest+1;
      }
    public int getHighestMonth()
   {
      int highest = 0;

      // Find the element with the highest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] > Rainfall[highest])
            highest = i;
      }
      // Return the element number.
      return highest;
   }
    public void displayMessage(){
          System.out.println("----------------------");
          System.out.println("Monthly Rainfall Totals For 2014"); 
          System.out.println(Arrays.toString(Months));
          System.out.println(Arrays.toString(Rainfall));
          System.out.println("Average Rainfall = "  +getAverageRainFall());
          System.out.println("Total Rainfall   = "  +getTotalRainFall());
          System.out.println("Highest Month    = "  +getHighestMonth());
          System.out.println("Lowest Month     = "  +getLowestMonth());
          System.out.println("----------------------");
}
    public double getRainAt(int e)
   {
      return Rainfall[e];
   }
   }



  /*public void inputFromFile() throws IOException
   {
      File myFile=new File ("Months.txt");
      Scanner inputFile=new Scanner(myFile);

      //loop through the file

      for(int i=0;i<12;i++){
         Months[12] = inputFile.nextLine();
         inputFile.close();
      }
   }*/
所以你可以用double totalRain=Rainfall.getTotalRainfall从main调用它

你将不得不让私人双[]降雨;还静,私静双[]雨


您应该为数组使用另一个名称,根据Java中的标准命名,您应该使用小写动词来声明字段。否则它可能会引起问题。

请参阅:请参阅:可能是新的降雨。GetTotalRainfall很抱歉这个新问题,但我的评论现在看起来很愚蠢。。。我应该删除它吗?别担心,留下它,谢谢,我没有把OP的问题读得那么好:也许是新的降雨。GetTotalRainfall很抱歉我的新问题,但是我的评论现在看起来很愚蠢。。。我应该删除它吗?别担心,留下它,谢谢,我没有很好地阅读OP问题:在这种情况下,double[]降雨也需要是静态的。将其设为私有静态double[]降雨,这样其他类就看不到它了,但这是一个很好的调用:我第一次查看时确信数组不是私有的,但现在它是。在这种情况下,double[]rain也需要是静态的。将其设为private static double[]rain,这样其他类就看不到它,但调用很好:我第一次查看时确信阵列不是私有的,但现在它是。
// Rainfall Class Start 

import java.util.Scanner;
import java.io.*;
import java.text.DecimalFormat;
import java.util.Arrays;

/**
 *
 * @author Adrian
 */
public class Rainfall{
   DecimalFormat twoDecimals = new DecimalFormat("##0.00");
   private final String[] Months={"Jan","Feb","Mar","Apr","May","Jun",
                           "Jul","Aug","Sep","Oct","Nov","Dec"};;
   private final double[] Rainfall;

   public Rainfall() throws IOException
   {
      Rainfall = new double[12];
   }
   public double getAverageRainFall()
   {
      return getTotalRainFall() / 12 ;
   }
   public void outputToFile()throws IOException
       {
       try (PrintWriter outputFile = new PrintWriter("Months.txt")) {
           Scanner kb=new Scanner(System.in);

           System.out.println("For each month enter a rainfall amount");

           for (int i=0;i<12;i++)
           {
               System.out.println(Months[i]+"?");
               Rainfall[i]=kb.nextDouble();
               outputFile.println(Months[i]+" "+Rainfall[i]);
               System.out.println(Months[i]+" "+Rainfall[i]);
           }
       }
       } 

    /**
     *
     * @return 
     */
    public double getTotalRainFall()
   {
      double total = 0.0;  // Accumulator initialized to 0

      // Accumulate the sum of the rain array elements.
      for (int i = 0; i < Rainfall.length; i++)
         total += Rainfall[i];

      // Return the sum.
      return total;
   }
    public double getLowestMonth()
   {
      int lowest = 0;

      // Find the element with the lowest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] < Rainfall[lowest])
            lowest = i;
      }
      // Return the element number.
      return lowest+1;
      }
    public int getHighestMonth()
   {
      int highest = 0;

      // Find the element with the highest value.
      for (int i = 1; i < Rainfall.length; i++)
      {
         if (Rainfall[i] > Rainfall[highest])
            highest = i;
      }
      // Return the element number.
      return highest;
   }
    public void displayMessage(){
          System.out.println("----------------------");
          System.out.println("Monthly Rainfall Totals For 2014"); 
          System.out.println(Arrays.toString(Months));
          System.out.println(Arrays.toString(Rainfall));
          System.out.println("Average Rainfall = "  +getAverageRainFall());
          System.out.println("Total Rainfall   = "  +getTotalRainFall());
          System.out.println("Highest Month    = "  +getHighestMonth());
          System.out.println("Lowest Month     = "  +getLowestMonth());
          System.out.println("----------------------");
}
    public double getRainAt(int e)
   {
      return Rainfall[e];
   }
   }



  /*public void inputFromFile() throws IOException
   {
      File myFile=new File ("Months.txt");
      Scanner inputFile=new Scanner(myFile);

      //loop through the file

      for(int i=0;i<12;i++){
         Months[12] = inputFile.nextLine();
         inputFile.close();
      }
   }*/