-2

質問: アレイの何が問題なのですか?どうすれば修正できますか?

詳細: main メソッドで配列を初期化し、1 つのメソッドで値を設定しました。2番目のメソッドで配列値を呼び出しましたが、すべて問題ありませんでした。3 番目のメソッドで配列を呼び出そうとすると、配列のサイズがまったく同じであるにもかかわらず、範囲外のエラーが発生しました。配列をコピーして2番目の配列をソートするために配列を呼び出そうとしていました。

ありがとうございました

private static  WeatherLocation[] WeatherSpots = new WeatherLocation[6];
private static Scanner Input = new Scanner(System.in);

public static void main(String[] args) 
{int Count;

for(Count = 0 ; Count < 6; Count++)
    WeatherSpots[Count] = new WeatherLocation();

WeatherSpots[0].LocationID = "Tciitcgaitc";
WeatherSpots[1].LocationID = "Redwood Haven";
WeatherSpots[2].LocationID = "Barrier Mountains";
WeatherSpots[3].LocationID = "Nina's Folly";
WeatherSpots[4].LocationID = "Scooly's Hill";
WeatherSpots[5].LocationID = "Twin Cones Park";
    SetUp();

    String Command = "";
    while(!Command.equals("Quit"))  {
    Menu();

    System.out.print("Enter Command: ");
    Command = Input.nextLine();

    if(Command.equals("Post"))
        PostTemperatureInfo();
    if(Command.equals("Daily"))
        WeeklyReport();
    else if (Command.equals("HighLow"))
        Sorting();
    }
}

public static void PostTemperatureInfo()
{
    Scanner LocalInput = new Scanner(System.in); 
    int K;
    int Temp;
    //...then get the values for each location...

    System.out.println( "Enter the Temperature for each weather station below:\n");
    System.out.println( "---------------------------------------------------------------");

    for(K = 0 ; K < 6 ; K++)  {
        System.out.println( "Weather Station: " + WeatherSpots[K].LocationID);  //Display the location of the fishing spot...

        System.out.print( "Enter Temperature:\t");   //Get the count...
        Temp = LocalInput.nextInt();
         System.out.println( "---------------------------------------------------------------");
         WeatherSpots[K].CatchCount = Temp;
        }
    System.out.println("");
     System.out.println("");
     System.out.println("");
}
public static void WeeklyReport()
{
    for(K = 0 ; K < 6 ; K++) 
        {System.out.println( "" + WeatherSpots[K].LocationID +"\t\t" + WeatherSpots[K].CatchCount + "\t\t" + String.format("%.2f", (WeatherSpots[K].CatchCount - 32) * 5 / 9));
}
}

public static void Sorting()
{int K = 0; 

for(K = 0 ; K < 6 ; K++);
    {int [] copycat = new int[K];


    System.arraycopy(WeatherSpots[K].CatchCount, 0, copycat[K], 0, 6);
    System.out.println("" + copycat[K]);
    Arrays.sort(copycat, 0, K);
    System.out.println("Minimum = " + copycat[0]); 
System.out.println("Maximum = " + copycat[K -1]);  

        }
    }
}
4

2 に答える 2

1

Q: ハードコードされた「6」の代わりに「array.length」を使用しないのはなぜですか?

Q: 回避できるのであれば、そのインデント スタイルを使用しないことを強くお勧めします。

とにかく-これはうまくいくはずです(私は自分で試したことはありません):

public static void Sorting() {
  for(int K = 0 ; K < WeatherSpots.length ; K++) {
     int [] copycat = new int[K];

     System.arraycopy(
       WeatherSpots[K].CatchCount, 0, copycat[K], 0, WeatherSpots.length);
     System.out.println("" + copycat[K]);
     Arrays.sort(copycat, 0, K);
     System.out.println("Minimum = " + copycat[0]); 
     System.out.println("Maximum = " + copycat[K -1]);  
  }
}

主なことは、不要な「;」を取り除くことでした。「for()」ループの後。

于 2012-06-24T04:27:06.907 に答える
1

copycat問題は、整数だけの長さの配列を割り当て、KK == 0 の場合でも 6 つの要素をそれに合わせようとしていることです。適切なインデックスが何であるかを理解するのに十分なコードを理解していません。 、しかしそれがあなたの問題の原因です。

実際、投稿されたコードがコンパイルされるとは思いません。からのこの行Sorting()

System.arraycopy(WeatherSpots[K].CatchCount, 0, copycat[K], 0, 6);

非常に疑わしいようです。の 1 番目と 3 番目の引数System.arraycopyは配列であるはずcopycat[K]ですが、int. どうやらそうですWeatherSpots[K].CatchCount

編集:

あなたのコメントとコードから、Sorting()ルーチンは の最小値と最大値を出力することになっているようですWeatherSpots[K].CatchCount。これは、あなたがしているよりもはるかに簡単に行うことができます。1 つの方法を次に示します。

public static void Sorting() {
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    for (WeatherLocation loc : WeatherSpots) {
        final int count = loc.CatchCount;
        if (count < min) {
            min = count;
        }
        if (count > max) {
            max = count;
        }
    }
    System.out.println("Minimum = " + min); 
    System.out.println("Maximum = " + max);
}
于 2012-06-24T04:39:00.637 に答える