このプログラムの目標は、というダブルタイプの配列に保存する、入力テキストファイルの数字をseatPrices.txt
として保存することです。Java - 入力ファイルの数値を2次元配列に格納する
入力ファイルは次のとおりです。
310:300:320:320:300:310
360:350:370:370:350:360
360:350:370:370:350:360
360:350:370:370:350:360
360:350:370:370:350:360
260:250:270:270:250:260
260:250:270:270:250:260
260:250:270:270:250:260
260:250:270:270:250:260
260:250:270:270:250:260
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
210:200:220:220:200:210
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
110:100:120:120:100:110
このための私のコードは次のとおりです。
import java.io.FileReader;
import java.util.Scanner;
import java.io.IOException;
public class testAirline {
// initializing variables and arrays
private static final int MAX_COLUMN = 6;
private static final int MAX_ROW = 30;
double[][] priceArray;
FileReader fr;
Scanner scan;
// this constructor reserves memory for arrays and sets the filereader and scanner variables, then call "start" method
public void Airline() throws IOException {
priceArray = new double[MAX_ROW][MAX_COLUMN];
fr = new FileReader(seatPrices);
scan = new Scanner(fr).useDelimiter(":");
start();
}
// fills the priceArray with numbers from seatPrices.txt
private void start() {
for (int i = 0; i < MAX_ROW; i++) {
for (int j = 0; j < MAX_COLUMN; j++) {
priceArray[i][j] = scan.nextDouble();
}
}
}
}
私はこれを実行すると、私はコンソールに次のエラーを取得:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at testAirline.start(Airline.java:19)
at testAirline.Airline(Airline.java:12)
だから私が "start"メソッド(start()
)を呼んだときとその数字がスキャンされたとき配列に格納されるファイルから削除します。私はなぜこれらのエラーがスローされているのか分かりません。私はdelimiter
を初めて使用しているので、これらの問題は適切にフォーマットしていないことに起因すると考えられましたが、このコードでエラーがスローされた行を見つけたときに疑わしいものが見つかりました。
ここで私のプログラムで働いていた答えは見つかりませんでした。私はすべての可能な解決策に開放されています!すべての助けをいただければ幸いです!
編集:ロバートの提案コード@から
出力:
:0,0 : 310.0
:0,1 : 300.0
:0,2 : 320.0
:0,3 : 320.0
:0,4 : 300.0
:1,0 : 360.0
:1,1 : 350.0
:1,2 : 370.0
:1,3 : 370.0
:1,4 : 350.0
:2,0 : 360.0
:2,1 : 350.0
:2,2 : 370.0
:2,3 : 370.0
:2,4 : 350.0
:3,0 : 360.0
:3,1 : 350.0
:3,2 : 370.0
:3,3 : 370.0
:3,4 : 350.0
:4,0 : 360.0
:4,1 : 350.0
:4,2 : 370.0
:4,3 : 370.0
:4,4 : 350.0
:5,0 : 260.0
:5,1 : 250.0
:5,2 : 270.0
:5,3 : 270.0
:5,4 : 250.0
:6,0 : 260.0
:6,1 : 250.0
:6,2 : 270.0
:6,3 : 270.0
:6,4 : 250.0
:7,0 : 260.0
:7,1 : 250.0
:7,2 : 270.0
:7,3 : 270.0
:7,4 : 250.0
:8,0 : 260.0
:8,1 : 250.0
:8,2 : 270.0
:8,3 : 270.0
:8,4 : 250.0
:9,0 : 260.0
:9,1 : 250.0
:9,2 : 270.0
:9,3 : 270.0
:9,4 : 250.0
:10,0 : 210.0
:10,1 : 200.0
:10,2 : 220.0
:10,3 : 220.0
:10,4 : 200.0
:11,0 : 210.0
:11,1 : 200.0
:11,2 : 220.0
:11,3 : 220.0
:11,4 : 200.0
:12,0 : 210.0
:12,1 : 200.0
:12,2 : 220.0
:12,3 : 220.0
:12,4 : 200.0
:13,0 : 210.0
:13,1 : 200.0
:13,2 : 220.0
:13,3 : 220.0
:13,4 : 200.0
:14,0 : 210.0
:14,1 : 200.0
:14,2 : 220.0
:14,3 : 220.0
:14,4 : 200.0
:15,0 : 210.0
:15,1 : 200.0
:15,2 : 220.0
:15,3 : 220.0
:15,4 : 200.0
:16,0 : 210.0
:16,1 : 200.0
:16,2 : 220.0
:16,3 : 220.0
:16,4 : 200.0
:17,0 : 210.0
:17,1 : 200.0
:17,2 : 220.0
:17,3 : 220.0
:17,4 : 200.0
:18,0 : 210.0
:18,1 : 200.0
:18,2 : 220.0
:18,3 : 220.0
:18,4 : 200.0
:19,0 : 210.0
:19,1 : 200.0
:19,2 : 220.0
:19,3 : 220.0
:19,4 : 200.0
:20,0 : 110.0
:20,1 : 100.0
:20,2 : 120.0
:20,3 : 120.0
:20,4 : 100.0
:21,0 : 110.0
:21,1 : 100.0
:21,2 : 120.0
:21,3 : 120.0
:21,4 : 100.0
:22,0 : 110.0
:22,1 : 100.0
:22,2 : 120.0
:22,3 : 120.0
:22,4 : 100.0
:23,0 : 110.0
:23,1 : 100.0
:23,2 : 120.0
:23,3 : 120.0
:23,4 : 100.0
:24,0 : 110.0
:24,1 : 100.0
:24,2 : 120.0
:24,3 : 120.0
:24,4 : 100.0
:25,0 : 110.0
:25,1 : 100.0
:25,2 : 120.0
:25,3 : 120.0
:25,4 : 100.0
:26,0 : 110.0
:26,1 : 100.0
:26,2 : 120.0
:26,3 : 120.0
:26,4 : 100.0
:27,0 : 110.0
:27,1 : 100.0
:27,2 : 120.0
:27,3 : 120.0
:27,4 : 100.0
:28,0 : 110.0
:28,1 : 100.0
:28,2 : 120.0
:28,3 : 120.0
:28,4 : 100.0
:29,0 : 110.0
:29,1 : 100.0
:29,2 : 120.0
:29,3 : 120.0
:29,4 : 100.0
これを実装した後、値が0〜29行目と0〜4行目に格納されていることに気付きました。私は、文字制限のため、私の元の質問に出力を掲載しました。私は印刷された値を見直し、入力ファイルの第6列全体が省略され、配列から6列目の印刷がないことを発見しました。 'Error found at ...'というメッセージは表示されませんでした。私はそれがjの 'for'ループの問題だと考えましたが、j <6まで実行するように設定しましたので、6番目の列があるはずです。それ以外はうまくいった。なぜ6番目の列は省略されますか? – ccbadger
**更新:** 'j
ccbadger
まあまあです。_ "完全なトークンの前に区切りパターンに一致する入力が続きます" _ https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next() - 私はこの問題に、区切り文字パターンに行区切り文字を含めることで対処できました: 'useDelimiter(" [:\ n \ r] + ")' - これは理想的ではありませんが、Scanner APIは代替。 – robert