前提・実現したいこと
Listインターフェースを使用してMainクラス、Secondクラスから成るプログラムを作りました。
Secondクラスを更にThirdクラスに分けようとしたところで、getメソッドを複数跨いで呼び出すとエラーになってしまうことに気づきました。
もし可能であれば当初の予定通りクラス分けをしたいです、エラーになってしまう理由、またはこれを回避するよい方法などをご存知でしたらお力お貸し頂ければ幸いです。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 2 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:458) at test.Second.getTest(Second.java:17) at test.Third.test(Third.java:8) at test.Main.main(Main.java:10)
該当のソースコード
Second.javaに作成したgetTestメソッドをThird.javaのtestメソッドで読み込み、更にそれをMain.javaで読み込んでいます。
Java
1//Main.java 2package test; 3 4public class Main { 5 public static void main(String[] args) { 6 Second second = new Second(); 7 Third third = new Third(); 8 9 second.addTest(); 10 System.out.println(third.test()); 11 } 12}
Java
1//Second.java 2package test; 3 4import java.util.ArrayList; 5import java.util.List; 6 7public class Second { 8 private List <Integer> test = new ArrayList<>(5); 9 10 public void addTest() { 11 for(int i = 1; i <= 5; i++){ 12 test.add(i); 13 } 14 } 15 16 public int getTest(int num) { 17 return test.get(num); 18 } 19}
Java
1//Third.java 2package test; 3 4public class Third { 5 Second second = new Second(); 6 7 public int test() { 8 return second.getTest(2); 9 } 10}
試したこと
Mainクラスで直接second.getTest(int num)を呼び出した場合、Secondクラス内でgetTest(int num)を呼び出すメソッドを作成しそれをMainクラスで呼び出した場合はエラーになりませんでした(つまりクラス分けさえしなければ正常に動作します)。
実際のプログラムではThird.javaのメソッド内でSecond.javaのメソッドの様々なList操作をThird.javaから行い、その全体をMain.javaで読み込む形になっているのですが、同じListのメソッドでも、addやsizeメソッドの部分ではエラーになりませんでした。
補足情報(FW/ツールのバージョンなど)
作成にはEclipseを使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/13 14:40