Java インスタンス生成時の人口密度計算の方法が分からない

実現したいこと

次のような問題通りのプログラムを作成したいです。

・47都道府県のデータファイル(pref.txt)を読み込み、すべての都道府県名、人口、面積、人口密度を表示するプログラムを作りなさい。
・プログラムのクラスファイルは「PrefCalc3.java」とする。
・都道府県名、人口、面積を格納する「Pref3」クラスを新たに作成する。
・条件
・Pref3のメンバ変数として、人口密度を格納する実数型変数densを定義する。
・コンストラクタでは、都道府県名、咽喉、面積を引数として受け取り、メンバ変数に格納するとともに、人口密度を計算し、メンバ変数densに格納する。
・ファイルのデータをすべて読み込み、ファイルを閉じた後、全データを表示する。
・人口密度の表示は、インスタンスのメンバ変数densを用いる。表示するときに人口密度を計算する式、メソッドを用いてはいけない。

なお、「Pref.txt」は以下のような内容のデータです。
Hokkaido 5683 83453
Aomori 1476 9606
Iwate 1416 15278
Miyagi 2365 7285
Akita 1189 11612
Yamagata 1244 9323
Fukushima 2127 13782
Ibaraki 2985 6096
Tochigi 2005 6408
Gumma 2025 6363
Saitama 6938 3797
Chiba 5926 5156
Tokyo 12059 2187
Kanagawa 8490 2415
Niigata 2476 12582
Toyama 1121 4247
Ishikawa 1181 4185
Fukui 829 4189
Yamanashi 888 4465
Nagano 2214 13585
Gifu 2108 10598
Shizuoka 3767 7779
Aichi 7043 5156
Mie 1857 5776
Shiga 1343 4017
Kyoto 2644 4613
Osaka 8805 1893
Hyogo 5551 8392
Nara 1443 3691
Wakayama 1070 4726
Tottori 613 3507
Shimane 761 6707
Okayama 1951 7112
Hiroshima 2879 8477
Yamaguchi 1528 6110
Tokushima 824 4145
Kagawa 1023 1876
Ehime 1493 5676
Kochi 814 7105
Fukuoka 5016 4971
Saga 877 2439
Nagasaki 1517 4092
Kumamoto 1859 7404
Oita 1221 6338
Miyazaki 1170 7734
Kagoshima 1786 9187
Okinawa 1318 2271

発生している問題・分からないこと

プログラムを作成してみたのですが、以下のようなエラーメッセージが出てしまいました。

[Compile] javac -d . *.java
[Result] No Error
[Execution] java -cp . sample.PrefCalc3
[Result]
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at sample.PrefCalc3.main(PrefCalc3.java:22)

このエラーを解決する方法、また問題文通りにプログラムを作成する方法を教えていただきたいです。
よろしくお願いします。

該当のソースコード

Java

1// Pref3.java2 3package sample;4 5class Pref3 {6 String name;7 int pop;8 int area;9 double dens;10 11 Pref3() {12 name = null;13 pop = area = 0;14 dens = 0.0;15 }16 17 Pref3(String n, int p, int a, double d) {18 name = n;19 pop = p;20 area = a;21 dens = (double)p / (double)a;22 }23}

Java

1// PrefCalc3.java2 3package sample;4import java.io.BufferedReader;5import java.io.FileReader;6import java.io.IOException;7import java.io.File;8import java.util.Scanner;9 10public class PrefCalc3 {11 static final int N = 47;12 public static void main(String[] args) {13 Pref3[] p = new Pref3[N];14 int ct = 0;15 try {16 BufferedReader br = new BufferedReader(new FileReader("pref.txt"));17 String s;18 while((s = br.readLine()) != null) {19 Scanner sc = new Scanner(s);20 p[ct] = new Pref3();21 p[ct].name = sc.next();22 p[ct].pop = sc.nextInt();23 p[ct].area = sc.nextInt();24 p[ct].dens = sc.nextDouble();25 sc.close();26 ct++;27 }28 br.close();29 } catch (IOException e) {30 e.printStackTrace();31 }32 for (int i=0; i<N; i++) {33 System.out.printf("%-9s %-5d %5d %.3f\n", p[i].name, p[i].pop, p[i].area, p[i].dens);34 }35 }36}

試したこと・調べたこと

上記の詳細・結果

Googleで、「Exception in thread "main" java.util.NoSuchElementException」のエラーメッセージを調べましたが、理解することができませんでした。以下のURLは、その時参考にしたものです。

https://qiita.com/Iyarr/questions/0d0ddc7f37aa5286c263

補足

特になし

コメントを投稿

0 コメント