前提
ここに質問の内容を詳しく書いてください。
arraylistに入っている車を検索するシステムを作っているときにエラーが発生し、そのエラーの解決方法がわからないので教えてほしいです。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- carsearch_0でそれぞれのif文を正しく実行しエラーで強制終了しないようにしたい
発生している問題・エラーメッセージ
車種名を入力してください クラウン 名前:クラウン,値段:4350000円 オプション一覧 キーレス,スマートキー,パワーウィンドウ,ベンチシート,シートヒーター,シートクーラー,本革シート,Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 8 out of bounds for length 0 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.get(ArrayList.java:459) at Car_register.carsearch_0(Car_register.java:127) at CarOption.search_0(CarOption.java:50) at Main.main(Main.java:21)
該当のソースコード
import java.io.IOException; import java.util.ArrayList; import java.nio.file.Files; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Scanner; public class CarOption extends Car_register{ private String[] status = new String[27]; private String fail; static String name; Scanner sc = new Scanner(System.in); CarOption(String name) { this.fail = name; } //車の登録 public void registration() { Path inputFilePath = Paths.get(this.fail); try { ArrayList<String> lines = (ArrayList<String>) Files.readAllLines(inputFilePath, StandardCharsets.UTF_8); for (String line : lines) { this.status = line.split(","); for (int i = 0; i < status.length; i++) { if (i == 11) { System.out.println(status[i]); } else { System.out.printf("%s,", status[i]); } } register(status); } System.out.println(""); } catch (IOException e) { System.out.println("読み込みに失敗しました"); System.out.println("プログラムを終了します"); System.out.println(e); System.exit(0); } } public void search_0(){ System.out.println("車種名を入力してください"); name = sc.nextLine(); Car_register.carsearch_0(this.name); } public void search_1(){ System.out.println("上限金額を入力してください"); int price_max = Integer.parseInt(sc.nextLine()); System.out.println("下限金額を入力してください"); int price_min = Integer.parseInt(sc.nextLine()); // Car_register.migration(); Car_register.carsearch_1(price_max, price_min); } public void search_2(){ // Car_register.migration(); } } import java.util.ArrayList; public class Car_register { //車のオプション static ArrayList<String> name = new ArrayList<String>(); static ArrayList<Integer> price = new ArrayList<Integer>(); static ArrayList<Integer> key = new ArrayList<Integer>(); static ArrayList<Integer> smart = new ArrayList<Integer>(); static ArrayList<Integer> power = new ArrayList<Integer>(); static ArrayList<Integer> sheet = new ArrayList<Integer>(); static ArrayList<Integer> heater = new ArrayList<Integer>(); static ArrayList<Integer> cooler = new ArrayList<Integer>(); static ArrayList<Integer> leather = new ArrayList<Integer>(); static ArrayList<Integer> ottoman = new ArrayList<Integer>(); static ArrayList<Integer> three = new ArrayList<Integer>(); static ArrayList<Integer> monitor = new ArrayList<Integer>(); static String car_data[] = new String[27]; static int car_price[] = new int[27]; static int car_key[] = new int[27]; static int car_smart[] = new int[27]; static int car_sheet[] = new int[27]; static int car_power[] = new int[27]; static int car_heater[] = new int[27]; static int car_cooler[] = new int[27]; static int car_leather[] = new int[27]; static int car_ottoman[] = new int[27]; static int car_monitor[] = new int[27]; static int car_three[] = new int[27]; static int cnt = 0; static int cnt2 = 0; public void register(String status[]) { for (int i = 0; i < 11; i++) { if (i == 0) { this.name.add(status[i]); } else if (i == 1) { this.price.add(Integer.parseInt(status[i])); } else if (i == 2) { this.key.add(Integer.parseInt(status[i])); } else if (i == 3) { this.smart.add(Integer.parseInt(status[i])); } else if (i == 4) { this.power.add(Integer.parseInt(status[i])); } else if (i == 5) { this.sheet.add(Integer.parseInt(status[i])); } else if (i == 6) { this.heater.add(Integer.parseInt(status[i])); } else if (i == 7) { this.cooler.add(Integer.parseInt(status[i])); } else if (i == 8) { this.leather.add(Integer.parseInt(status[i])); } else if (i == 9) { this.ottoman.add(Integer.parseInt(status[i])); } else if (i == 10) { this.three.add(Integer.parseInt(status[i])); } else if (i == 11) { this.monitor.add(Integer.parseInt(status[i])); } } } public void display() { System.out.println("車一覧"); for (int i = 0; i < 27; i++) { System.out.println(name.get(i)); } } static void carsearch_0(String car_name){ for(int i = 0; i < name.size(); i++){ if(car_name.equals(name.get(i)) && name.size() > i){ System.out.println("名前:" + name.get(i) + "," + "値段:" + price.get(i) + "円"); cnt2++; System.out.println("オプション一覧"); if(key.get(i) == 1){ System.out.printf("キーレス,"); cnt++; } if(smart.get(i) == 1){ System.out.printf("スマートキー,"); cnt++; } if(power.get(i) == 1){ System.out.printf("パワーウィンドウ,"); cnt++; } if(sheet.get(i) == 1){ System.out.printf("ベンチシート,"); cnt++; } if(heater.get(i) == 1){ System.out.printf("シートヒーター,"); cnt++; } if(cooler.get(i) == 1){ System.out.printf("シートクーラー,"); cnt++; } if(leather.get(i) == 1){ System.out.printf("本革シート,"); cnt++; } if(three.get(i) == 1){ System.out.printf("3列シート,"); cnt++; } if(monitor.get(i) == 1){ System.out.println("後席モニター"); cnt++; } if(cnt == 0){ System.out.println("オプションはありません"); } cnt = 0; }else{ if(i == 26 && cnt2 == 0){ System.out.println("該当する車種は存在しません"); cnt2 = 0; } } } } } import java.util.Scanner; public class Main { public static void main(String[] args){ CarOption car = new CarOption(args[0]); car.registration(); Scanner sc = new Scanner(System.in); System.out.println("/MENU/"); System.out.println("「0」車一覧「1」検索「2」終了 "); int a = Integer.parseInt(sc.next()); while (true) { if (a == 0) { car.display(); } else if (a == 1) { System.out.println("検索の仕方を選択してください"); System.out.println("「0」車種名「1」値段「2」オプション"); int b = Integer.parseInt(sc.next()); if(b == 0){ car.search_0(); }else if(b == 1){ car.search_1(); }else if(b == 2){ car.search_2(); } } else if (a == 2) { System.out.println("ありがとうございました"); break; } System.out.println("/MENU/"); System.out.println("「0」車一覧「1」検索「2」終了 "); a = Integer.parseInt(sc.next()); } sc.close(); } } アルファード,3597000,1,1,1,0,1,0,0,1,1,1 ハイエース,2903600,1,1,1,0,0,0,0,0,1,0 プリウス,2597000,1,1,1,0,1,0,1,0,0,0 ハリアー,2990000,1,1,1,1,1,0,0,0,0,0 ランドクルーザー,5100000,1,1,1,1,1,0,1,0,1,0 アクア,1980000,1,1,1,0,0,0,0,0,0,0 ヴォクシー,3090000,1,1,1,0,1,0,0,0,1,0 ヴェルファイア,4306000,1,1,1,0,0,0,0,1,1,1 クラウン,4350000,1,1,1,1,1,1,1,0,0,0 GR86,2799000,1,1,1,0,1,0,0,0,0,0 ノア,2670000,1,1,1,0,0,0,0,0,1,0 シエンタ,1818500,1,1,1,0,0,0,0,0,1,0 ハイラックス,4312000,1,1,1,0,0,0,0,0,0,0 RAV4,2774000,1,1,1,0,0,0,0,0,0,0 ヤリスクロス,1896000,1,1,1,0,0,0,0,0,0,0 ライズ,1707000,1,1,1,0,1,0,0,0,0,0 ルーミー,1556500,1,1,1,0,1,0,0,0,0,0 カローラスポーツ,2169000,1,1,1,0,0,0,0,0,0,0 パッソ,1265000,1,0,1,0,1,0,0,0,0,0 カムリ,3495000,1,1,1,1,0,0,0,0,0,0 カローラフィールダー,1709400,1,1,1,0,0,0,0,0,0,0 カローラクロス,1999000,1,0,1,0,0,0,0,0,0,0 カローラツーリング,2013000,1,1,1,0,1,0,0,0,0,0 スープラ,4995000,1,1,1,1,1,0,0,0,0,0 C-HR,2792000,1,1,1,0,1,0,0,0,0,0 MIRAI,7100000,1,1,1,1,1,1,1,0,0,0 コペン,2382200,1,1,1,0,1,0,0,0,0,0
試したこと
まず、CarOptionクラスのsearch_0で車種名を入力し、それを引数にしCar_registerクラスのcarsearch_0を実行した際に上に載せたようなエラーが出てしまいました。
補足情報(FW/ツールのバージョンなど)

回答1件
あなたの回答
tips
プレビュー