前提・実現したいこと
都道府県リストを作り、全データを出力するところまではできました。
ここに追加の機能として、
Scanner sc = new Scanner(System.in);
String line = sc.next();
で入力された県名を都道府県リストに格納されている県名と比較して、一致した県名のデータ(面積、人口、人口密度)を出力したいです。
また、プログラムは繰り返され、入力された県名が存在しなかった場合終了としたいです。
そこで、ここからMainクラスを作成し、計3つのクラスにした上で上記の処理を実装したいのですが、どうしたらいいか分からず詰まってしまいました。
実装例と解説を頂けると幸いです。
ご教授のほどよろしくお願いします。
該当のソースコード
Java
1// Prefクラス 2import java.nio.file.Path; 3import java.nio.file.Paths; 4import java.nio.file.Files; 5import java.util.List; 6import java.util.ArrayList; 7import java.io.IOException; 8import java.util.Scanner; 9 10public class Pref { 11 public static void main(String[] args) { 12 13 List<Prefecture> prefectures = new ArrayList<Prefecture>(); 14 15 try{ 16 // ファイル読み込み 17 Path readPath = Paths.get("revenge.txt"); 18 Scanner file = new Scanner(readPath); 19 //Scanner sc = new Scanner(System.in); 20 //String line = sc.next(); 21 22 while(file.hasNext()) { 23 final String str = file.nextLine(); 24 final String[] array = str.split(","); 25 26 if (array == null && array.length != 3) { 27 //エラー処理 28 System.out.println("データが存在しません"); 29 } 30 31 final String name = array[0]; 32 final double area = Double.parseDouble(array[1]); 33 final double population = Double.parseDouble(array[2]); 34 final Prefecture p = new Prefecture(name, area, population); 35 prefectures.add(p); 36 } 37 } 38 catch(IOException e) { 39 e.printStackTrace(); 40 } 41 42 // 出力する 43 for(Prefecture p:prefectures) { 44 System.out.println(p); 45 } 46 } 47} 48 49// Prefectureクラス 50public class Prefecture { 51 private String name; 52 private double area; 53 private double population; 54 55 public Prefecture(String name, double area, double population) { 56 this.name = name; 57 this.area = area; 58 this.population = population; 59 } 60 61 public final String getName() { 62 return name; 63 } 64 65 public final double getArea() { 66 return area; 67 } 68 69 public final double getPopulation() { 70 return population; 71 } 72 73 public final double getPopulationDensity() { 74 return area == 0 ? null:(double)population/area; 75 } 76 77 @Override 78 public String toString(){ 79 return getName() + ":"+ String.format("%.0f", getArea()) + ":"+ 80 String.format("%.0f", getPopulation()) + ":"+ String.format("%.0f", getPopulationDensity()); 81 } 82}
回答1件
あなたの回答
tips
プレビュー