前提・実現したいこと
ポケモンのシステム内で行われる個体値パズルというものを行うプログラムを作っています。
発生している問題・エラーメッセージ
定義したはずのH A B C D Sという変数をmainメソッドからrecalcメソッドに渡したいのですが、
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
at java.base/java.util.LinkedList.get(LinkedList.java:480)
at IVpazzle.recalc(IVpazzle.java:93)
at IVpazzle.main(IVpazzle.java:33)
というエラーメッセージが出てしまいました。
該当のソースコード
Java
1import java.util.*; 2 3public class IVpazzle{ 4 public static void main(String[] args) { 5 System.out.printf(" IVsupporter ver%1.1f%n ", 1.0); 6 System.out.println("注:自然Vが発生している個体値はサポートされていません"); 7 System.out.println(); 8 System.out.println("ポケモンのV固定数を入力してください"); 9 int Vnum = new Scanner(System.in).nextInt(); 10 if (Vnum < 0 || Vnum > 5){ 11 System.out.println("値が不正です"); 12 System.exit(0); 13 } 14 System.out.println(" ポケモンの個体値を入力してください(例:x x x x x x)"); 15 String IV = new Scanner(System.in).nextLine(); 16 String Array[] = IV.split(" "); 17 int H = Integer.parseInt(Array[0]); 18 int A = Integer.parseInt(Array[1]); 19 int B = Integer.parseInt(Array[2]); 20 int C = Integer.parseInt(Array[3]); 21 int D = Integer.parseInt(Array[4]); 22 int S = Integer.parseInt(Array[5]); 23 if (H < 0 || H > 31 || A < 0 || A > 31 || B < 0 || B > 31 || C < 0 || C > 31 || D < 0 || D > 31 || S < 0 || S > 31){ 24 System.out.println("値が不正です"); 25 System.exit(0); 26} 27 else if (!(H == 31) && (H % 8 == 0)){ 28 H = 31; 29 int[] IVf = recalc(H, A, B, C, D, S); 30 } 31 else if (!(H == 31) && (H % 8 == 1) && !(A == 31)){ 32 A = 31; 33 int[] IVf = recalc(H, A, B, C, D, S); 34 } 35 else if (!(H == 31) && (H % 8 == 2) && !(B == 31)){ 36 B = 31; 37 int[] IVf = recalc(H, A, B, C, D, S); 38 } 39 else if (!(H == 31) && (H % 8 == 3) && !(C == 31)){ 40 C = 31; 41 int[] IVf = recalc(H, A, B, C, D, S); 42 } 43 else if (!(H == 31) && (H % 8 == 4) && !(D == 31)){ 44 D = 31; 45 int[] IVf = recalc(H, A, B, C, D, S); 46 } 47 else if (!(H == 31) && (H % 8 == 5) && !(S == 31)){ 48 S = 31; 49 int[] IVf = recalc(H, A, B, C, D, S); 50 } 51 52 else if (!(H == 31) && (H % 8 == 1) && (A == 31) ){ 53 int[] IVf = recalc(H, A, B, C, D, S); 54} 55 else if (!(H == 31) && (H % 8 == 2) && (B == 31)){ 56 int[] IVf = recalc(H, A, B, C, D, S); 57} 58 else if (!(H == 31) && (H % 8 == 3) && (C == 31)){ 59 int[] IVf = recalc(H, A, B, C, D, S); 60} 61 else if (!(H == 31) && (H % 8 == 4) && (D == 31)){ 62 int[] IVf = recalc(H, A, B, C, D, S); 63} 64 else if (!(H == 31) && (H % 8 == 5) && (S == 31)){ 65 int[] IVf = recalc(H, A, B, C, D, S); 66} 67 } 68 69 public static int[] recalc(int H, int A, int B, int C, int D, int S){ 70 LinkedList<Integer> num = new LinkedList<Integer>(); 71 if (!(H == 31)) 72 num.add(H); 73 else if (!(A == 31)) 74 num.add(A); 75 else if (!(B == 31)) 76 num.add(B); 77 else if (!(C == 31)) 78 num.add(C); 79 else if (!(D == 31)) 80 num.add(D); 81 else if (!(S == 31)) 82 num.add(S); 83 num.remove(0); 84 int[] IV = new int[6]; 85 IV[0] = H; 86 IV[1] = A; 87 IV[2] = B; 88 IV[3] = C; 89 IV[4] = D; 90 IV[5] = S; 91 for (int r = 0; r <= num.size(); r++){ 92 if ( !(IV[0] == 31)){ 93 IV[0] = num.get(0); 94 } 95 else if ((IV[0] == 31) && !(IV[1] == 31)){ 96 IV[1] = num.get(0); 97 } 98 else if ((IV[0] == 31) && (IV[1] == 31) && !(IV[2] == 31)){ 99 IV[2] = num.get(0); 100 } 101 else if ((IV[0] == 31) && (IV[1] == 31) && (IV[2] == 31) && !(IV[3] == 31)){ 102 IV[3] = num.get(0); 103 } 104 else if ((IV[0] == 31) && (IV[1] == 31) && (IV[2] == 31) && (IV[3] == 31) && !(IV[4] == 31)){ 105 IV[4] = num.get(0); 106 } 107 else if ((IV[0] == 31) && (IV[1] == 31) && (IV[2] == 31) && (IV[3] == 31) && (IV[4] == 31) && !(IV[5] == 31)){ 108 IV[5] = num.get(0); 109 } 110 num.remove(0); 111 } 112 System.out.print(IV[0] + " "); 113 System.out.print(IV[1] + " "); 114 System.out.print(IV[2] + " "); 115 System.out.print(IV[3] + " "); 116 System.out.print(IV[4] + " "); 117 System.out.print(IV[5] + " "); 118 return IV; 119 } 120}
試したこと
System.out.printlnで値がH A B C D Sに代入されているか確認しました。
調べたところ、OutOfBoundsExceptionは値が入っていなかったり宣言していない変数を使おうとすると出るエラーのようだったので、全体を何度か見直しましたが、表記ミスを見つけることはできませんでした。
補足情報(FW/ツールのバージョンなど)
開発環境はmacです。IDEはAtomで、JDKは最新のものを使っています。
回答1件
あなたの回答
tips
プレビュー