Java 从非静态上下文打印数组

Java 从非静态上下文打印数组,java,arrays,Java,Arrays,所以我想打印这个代码。。它说: 无法从静态上下文访问非静态方法rain 问题是在平行列中打印所有月份及其降雨量的名称,以及它们的总平均值以及降雨量最高和最低的月份。 请帮帮我 public class rainfall { String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; double[] values = { 0.40,0.94,3.21

所以我想打印这个代码。。它说:

无法从静态上下文访问非静态方法rain

问题是在平行列中打印所有月份及其降雨量的名称,以及它们的总平均值以及降雨量最高和最低的月份。
请帮帮我

public class rainfall 
{

    String[] rain =  { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
    double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53};


    public double Total( double total )
    {
        total = 0;

        for( int i = 0 ; i < values.length ; i ++ )
        {
            total += values[i];
        }

        return total;
    }

    public double Average( double average)
    {
        double total = 0;
        Total (total);
        for ( int j = 0; j < values.length; j ++ )
        {
            average = total/values.length ;
        }

        return average;
    }

    public String mostRain (double high,String highest )
    {
        high = values[0];

        for(int i = 1 ; i < rain.length ; i ++ )
        {
            if ( values[i]>high )
            {
                highest = rain[i];
            }
            return highest;

        }
    }

    public String leastRain ( String least, double low )
    {
        least = "";
        low= values[0];

        for(int i = 1; i < rain.length ; i++ )
        {
            if ( values[i]<low )
            {
                least = rain[i];
            }

            return least;
        }
    }

    public static void main(String[]Args)
    {
        String highest = "" ;
        String least = "";
        double total = 0 ;
        double average = 0 ;
        double high = 0;
        double low = 0;



        System.out.println(" AUSTIN Tx RAINFALL 2009 " );

        for( int i = 0 ;  i < rain.length ; i ++ )
        {
            System.out.println(rain[i]+"\t"+values[i]);
        }

        System.out.println(Total(total));
        System.out.println(Average(average));
        System.out.println(mostRain(highest,high));
        System.out.println(leastRain(least,low));

    }
}
公共类降雨
{
字符串[]雨={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
双[]值={0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53};
公共双倍总计(双倍总计)
{
总数=0;
对于(int i=0;i高)
{
最高=雨[i];
}
回报最高;
}
}
公共字符串leastRain(最小字符串,双低)
{
“最少”;
低=数值[0];
对于(int i=1;i如果(值[i]实例变量无法在静态方法(如
main
)中访问,则必须将所有字段和方法设置为静态

static String[] rain =  { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
static double[] values;
public static String mostRain(...
public static String leastRain(...

您的问题是,您的主要方法是
静态
,而其他方法和变量则不是

您需要创建一个Rainsion的实例,并调用该实例中的方法,或者将所有方法和变量都设置为静态。

更改此设置

String[] rain =  { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53};
对此

static String[] rain =  { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
static double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53};

将(非静态)变量放入主函数本身,然后根据需要将它们传递到函数中

public static final void main(String[] ignored)  {
   String[] rain =  { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
   double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53};

   Total(values);
正如其他人所说,main调用的所有函数都需要是静态的,或者通过新实例调用

(请将函数名改为小写。)

您需要将“static”添加到所有方法中,以及在开始时定义的变量(数组“rain”和“value”)


您应该始终考虑在不使用您正在使用的类中定义的属性时设置方法为静态(例如,计算平均值的方法,通常只取决于作为参数获得的值)。

< P>在静态上下文中调用方法:

System.out.println(Average(...));
这意味着您使用的方法没有在对象上下文中使用它,即
object.Average(…)

你要么

  • 将方法声明为静态:

    公共静态双平均值(…){

  • 或在对象上使用该方法:

    YourObject obj=新建YourObject(); 目标平均值(…)


PS:方法应以小写字符开头。

由于这些方法是非静态的,因此只能通过该类的对象访问它们。当运行静态方法时,它们不会通过实例化的对象运行,因此它们无法访问非静态方法

因此,您要做的是在main中创建一个Rainsion对象并调用该对象上的方法。这通常是这样做的。通常,main()方法本身不做很多工作,而是创建一个对象并调用该对象上的方法来完成实际工作

所以你可以这样做:

public class Rainfall {
    //your methods from above

    public static void main(String[]Args) {
        String highest = "" ;
        String least = "";
        double total = 0 ;
        double average = 0 ;
        double high = 0;
        double low = 0;

        Rainfall rain = new Rainfall();
        System.out.println(" AUSTIN Tx RAINFALL 2009 " );

        for( int i = 0 ;  i < rain.length ; i ++ ) {
            System.out.println(rain[i]+"\t"+values[i]);
        }

        System.out.println(rain.Total(total));
        System.out.println(rain.Average(average));
        System.out.println(rain.mostRain(highest,high));
        System.out.println(rain.leastRain(least,low));

    }

}
公共类降雨{
//从上面看你的方法
公共静态void main(字符串[]Args){
字符串最高=”;
字符串least=“”;
双倍合计=0;
双平均=0;
双高=0;
双低=0;
降雨量=新降雨量();
System.out.println(“2009年德克萨斯州奥斯汀降雨”);
对于(int i=0;i
您可能想查看上的官方教程。