3

毎月の降雨量を取得する Java プログラムを作成しています。完全に機能していますが、月のインデックスを取得する方法を知る必要があるだけです。たとえば、出力ステートメントがあります。降水量が最も少ない月は 1.6 インチです。最低月のインデックスである「1」を取得するにはどうすればよいですか? 実際の最低降水量の数値は問題なく取得できますが、指数は取得できません。

私は月[n-1]を試しましたが、「非静的変数の月は静的コンテキストから参照できません」というエラーが引き続き表示されます。

どんな助けでも素晴らしいでしょう。ありがとう。

// 編集

これがコードです。静的をいじってみましたが、エラーが増えただけですか? だから、一番下の月[n]の部分は私が行き詰まっているところです。

import java.util.*;

public class Rainfall {

Scanner in=new Scanner(System.in);
 int month=12;
 double total=0;
 double average;
     double months[];

public Rainfall()
{
    months=new double[12];
}

public void setMonths()
{
     for(int n=1; n<=month; n++ )
     {
     System.out.print("Enter the rainfall (in inches) for month #"+n+": ");
     months[n-1] = in.nextDouble();

     //Input Validation - Cannot accept a negative number
        while (months[n-1] < 0)
        {
         System.out.print("Rainfall must be at least 0. Please enter a new value.");
         months[n-1] = in.nextDouble();
        }
     }
}

public double getTotalRainFall()
{
    total = 0;
    for(int i=0; i<12;i++)
    {
        total=total+months[i];
    }
    return total;
}

public double getAverageRainFall()
{
    average = total/12;
    return average;
}

public double getHighestMonth()
{
    double highest=0;
    for ( int i = 0; i < 12; i++)
    {
        if ( months[i] > highest)
        {
            highest = months[i] ;
        }
    }
    return highest;
}

public double getLowestMonth()
{
    double lowest = Double.MAX_VALUE;
    for ( int n = 0; n < month; n++)
        {
            if (months[n] < lowest )
            {
                lowest = months[n];
            }
        }
        return lowest;
}

public static void main(String[]args)
{
    Rainfall r =new Rainfall();
    r.setMonths();
    System.out.println("The total rainfall for this year is " + r.getTotalRainFall());
            System.out.println("The average rainfall for this year is " + r.getAverageRainFall());
    System.out.println("The month with the highest amount of rain is " + months[n] + "with" + r.getHighestMonth() "inches");
            System.out.println("The month with the lowest amount of rain is  " + months[n] "with" + r.getLowestMonth() "inches");

}

}

/// EDIT #2 - 上記のコードは、各月のユーザー入力を取得するときに機能します。今、配列 thisYear に値を設定しようとしています (つまり、ユーザー入力を削除します)。計算が機能しなくなりました。私は何を間違えましたか?

package Rainfall;

public class Rainfall {

int month = 12;
double total = 0;
double average; 
double getRainAt[];

 public Rainfall() {
    getRainAt = new double[12];
}

    double getTotalRain() {
    for (int i = 0; i < 12; i++) {
        total = total + getRainAt[i];
    }
    return total;
}

   double getAverageRain() {
    average = total / 12;
    return average;
}

int getHighestMonth() {
    int high = 0;
    for (int i = 0; i < 12; i++) {
        if (getRainAt[i] > getRainAt[high]) {
            high = i;
        }
    }
    return high;
}

int getLowestMonth() {
    int low = 0;
    for (int i = 0; i < 12; i++) {
        if (getRainAt[i] < getRainAt[low]) {
            low = i;
        }
    }
    return low;
}


public static void main(String[] args) {
   // Create an array of rainfall figures. 

  double thisYear[] = {1.6, 2.1, 1.7, 3.5, 2.6, 3.7,
                       3.9, 2.6, 2.9, 4.3, 2.4, 3.7 };

  int high;      // The high month
  int low;       // The low month

  // Create a RainFall object initialized with the figures
  // stored in the thisYear array.
  Rainfall r = new Rainfall(thisYear);
  // Display the statistics.
  System.out.println("The total rainfall for this year is " +
                     r.getTotalRain());
  System.out.println("The average rainfall for this year is " +
                     r.getAverageRain());
  high = r.getHighestMonth();
  System.out.println("The month with the highest amount of rain " +
                     "is " + (high+1) + " with " + r.getRainAt(high) +
                     " inches.");
  low = r.getLowestMonth();
  System.out.println("The month with the lowest amount of rain " +
                     "is " + (low+1) + " with " + r.getRainAt(low) +
                     " inches.");
    }
  }
4

3 に答える 3

1

非静的変数月は静的コンテキストから参照できません

このコンパイル時エラーは、静的メンバーまたはブロックのような非静的メンバーにアクセスすると発生します-

クラステスト{プライベートint i = 0; public static void main(String[] args){ i=1; //これにより、そのエラーが生成されます。この問題は少し違った見方ができると思います

class RainFall{
     private double minFall;
     private double maxFall;
    public void setMinFall(double minFall) {
        this.minFall = minFall;
    }
    public double getMinFall() {
        return minFall;
    }
    public void setMaxFall(double maxFall) {
        this.maxFall = maxFall;
    }
    public double getMaxFall() {
        return maxFall;
    }

}
public class RainFallMeasure{
        public static void main(String[] args) {
     Map<Integer,RainFall> rainFalls=new HashMap<Integer,RainFall>();
     RainFall janRainFall = new RainFall();
     janRainFall.setMinFall(1);
     janRainFall.setMaxFall(1.6);
     rainFalls.put(Calendar.JANUARY, janRainFall);
     RainFall febRainFall = new RainFall();
     ...
     rainFalls.put(Calendar.FEBRUARY, febRainFall);
    }
}
于 2012-05-04T05:44:44.123 に答える
0

この方法でインデックスを見つけることができます

public class TEST {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double temp[] = {1, 5, 3};
        System.out.print(getIndex(temp,3));
    }
      //takes 2 parameters one is array and other is the value for which you want find index
    public static int getIndex(double[] temp, int value)
    {
        int i ;
        for( i= 0; i< temp.length; i++)
        {
            if(temp[i] == value)
            {
                return i;           
            }
        }
        return -1;
    }
}

temp の代わりに、パラメーターを渡すときに月を使用できます。

于 2012-05-04T05:57:53.640 に答える
0

もう 1 つの方法は、アプリケーションを再設計して、メソッドが降雨量自体を計算する代わりに、降水量が最も多い月と最も少ない月のインデックスを計算するようにすることです。アイデアは、インデックスを取得したら、いつでもオンデマンドで実際の値を検索できるということです。

私はあなたのためにコードにパッチを当てて、これを行うようにし、いくつかの「静的な」エラーを自由に修正しました.

この動作中のアプリケーションで遊んで、必要に応じて調整できます。

import java.util.*;

public class Rainfall {

    Scanner in = new Scanner(System.in);
    int month = 12;
    double total = 0;
    double average;
    double months[];

    public Rainfall() {
        months = new double[12];
    }

    public void enterMonthData() {
        for (int n = 1; n <= month; n++) {
            System.out.print("Enter the rainfall (in inches) for month #" + n + ": ");
            months[n - 1] = in.nextDouble();

            // Input Validation - Cannot accept a negative number
            while (months[n - 1] < 0) {
                System.out.print("Rainfall must be at least 0. Please enter a new value.");
                months[n - 1] = in.nextDouble();
            }
        }
    }

    public double getTotalRainFall() {
        total = 0;
        for (int i = 0; i < 12; i++) {
            total = total + months[i];
        }
        return total;
    }

    public double getAverageRainFall() {
        average = total / 12;
        return average;
    }

    /**
     * Returns the index of the month with the highest rainfall.
     */
    public int getHighestMonth() {
        int highest = 0;
        for (int i = 0; i < 12; i++) {
            if (months[i] > months[highest]) {
                highest = i;
            }
        }
        return highest;
    }

    /**
     * Returns the index of the month with the lowest rainfall.
     */
    public int getLowestMonth() {
        int lowest = 0;
        for (int i = 0; i < 12; i++) {
            if (months[i] < months[lowest]) {
                lowest = i;
            }
        }
        return lowest;
    }

    public static void main(String[]args) {
        Rainfall r = new Rainfall();
        r.enterMonthData();
        System.out.println("The total rainfall for this year is " + r.getTotalRainFall());
        System.out.println("The average rainfall for this year is " + r.getAverageRainFall());
        int lowest = r.getLowestMonth();
        int highest = r.getHighestMonth();
        System.out.println("The month with the highest amount of rain is " + (highest+1) + " with " + r.months[highest] + " inches");
        System.out.println("The month with the lowest amount of rain is  " + (lowest+1) + " with " + r.months[lowest] + " inches");
    }
}

補遺

フォローアップの質問に答えるにRainfallは、降雨データを取り込んでこのデータをオブジェクトのフィールドに格納するオブジェクトのコンストラクターを提供する必要があります。これはあなたが望むものです:

public class Rainfall {

    private double[] amounts;

    public Rainfall(double[] amounts) {
        this.amounts = amounts;
    }

    double getTotalRain() {
        double total = 0.0;
        for (int i = 0; i < amounts.length; i++) {
            total += amounts[i];
        }
        return total;
    }

    double getAverageRain() {
        return getTotalRain() / amounts.length;
    }

    int getHighestMonth() {
        int high = 0;
        for (int i = 0; i < amounts.length; i++) {
            if (amounts[i] > amounts[high]) {
                high = i;
            }
        }
        return high;
    }

    int getLowestMonth() {
        int low = 0;
        for (int i = 0; i < 12; i++) {
            if (amounts[i] < amounts[low]) {
                low = i;
            }
        }
        return low;
    }

    /**
     * Returns the total rain the given month number.  Month numbers
     * start at 0, not 1.
     */
    double getRainForMonth(int monthNumber) {
        return amounts[monthNumber];
    }

    public static void main(String[] args) {

        // Sample data for testing
        double thisYear[] = { 1.6, 2.1, 1.7, 3.5, 2.6, 3.7, 3.9, 2.6, 2.9, 4.3, 2.4, 3.7 };

        int high;    // The high month, starting at 0
        int low;     // The low month, stating at 0

        // Create a RainFall object initialized with amounts from above array.
        Rainfall r = new Rainfall(thisYear);

        // Display the statistics.
        System.out.println("The total rainfall for this year is " + r.getTotalRain());
        System.out.println("The average rainfall for this year is " + r.getAverageRain());
        high = r.getHighestMonth();
        System.out.println("The month with the highest amount of rain is " + (high + 1)
                + " with " + r.getRainForMonth(high) + " inches.");
        low = r.getLowestMonth();
        System.out.println("The month with the lowest amount of rain is " + (low + 1)
                + " with " + r.getRainForMonth(low) + " inches.");
    }
}
于 2012-05-06T04:04:43.530 に答える