0

ファイルからデータを収集し、それに何らかの処理を行うプログラムに取り組んできましたが (コードと疑似コードで明らかなように)、文字列の各要素を正しい配列に入れるのに苦労しています。ファイルの行は次のようになります。

1980 Aug    945 100 Allen

私の意見ではそれが最も簡単なので、部分文字列メソッドを使用したいと考えています。それを行うより良い方法はありますか?これまでの私のコードは次のとおりです。問題は正確にはどこにあり、どのように修正すればよいですか? ありがとう!:)

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.lang.String; 
public class Hurricanes2
{

public static void main(String [] args) throws IOException 
{
int counter = 0;
String [] token = new String[1000];

String [] tokenElements = new String[128];
String [] hurricaneYear = new String[64];
String [] hurricaneName = new String[64];
String [] hurricaneMonth = new String[64];
int []  hurricaneCategory = new int[64];
double [] hurricanePressure = new double[64];
double tempKnots;
double knotsToMph; 
double [] hurricaneWindSpeed = new double[64];
double categoryAverage;
double pressureAverage;
double speedAverage; 
String headerData = "                          Hurricanes 1980 - 2006\n\n Year         Hurricane       Category        Pressure(MB)        Wind Speed     (MPH)\n========================================================================";
Scanner in = new Scanner(System.in);
Scanner inFile = new Scanner(new File("hurcData2.txt"));
System.out.println(headerData);

/**---Use for-each (line:token) 
 * Parse for year - > year array
 * parse for name - > name array
 * parse for knots - > tempKnots
 * knotsToMph = tempKnots  * 1.15078
 * hurricaneWindSpeed[counter] = knotsToMph
 *  enter if-else to calculate category (hurricaneCategory [] = 1,2,3,4, or 5):
 *      74-95 cat1 
 *      96-110 cat2
 *      111 - 129 cat3
 *      130-156 cat4
 *      157 or higher cat 5
 * 
 * 
 */
 while(inFile.hasNextLine()){

        token[counter] = inFile.nextLine();
        String tempToken = token[counter]; 
        hurricaneYear[counter] = tempToken.substring(0, 3);
        hurricaneMonth[counter] = tempToken.substring(6, 8);
        hurricanePressure[counter] = Double.parseDouble(tempToken.substring(10, 12));
        hurricaneWindSpeed[counter] = Double.parseDouble(tempToken.substring(14, 16));
        hurricaneName[counter] = tempToken.substring(17);


        counter++;


   }
System.out.print("Lines: " + counter);
}
}
4

3 に答える 3

0

質問のタイトルには、範囲外のインデックスの例外がリストされていますが、それが StringIndexOutOfBoundsException または ArrayIndexOutOfBoundsException であるかどうかはわかりません。

1000 要素を保持するように定義された配列に行を読み取りますが、解析された文字列の断片を 64 要素のみを保持するように定義された配列に入れます。

解析ロジックは問題ありませんが、配列がいっぱいになっている可能性があります。

于 2013-11-04T18:20:46.627 に答える