前提・実現したいこと
配列の要素数を指定し、その要素数分だけランダムで値を代入するプログラムです。
そのエラー処理と例外処理をしています。
発生している問題・エラーメッセージ
配列arrから取り出したいindexを入力し、arrがnullの時と、指定した要素数よりも大きい値を指定した時に-1を返したいのですが、以下のようなエラーコードが出ます。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 5
該当のソースコード
java
1import java.util.Random; 2import java.util.Scanner; 3 4public class Main { 5 6 /** 7 * main 8 * @param args 9 */ 10 public static void main(String[] args) { 11 12 Scanner sc = new Scanner(System.in); 13 14 /* 15 * 配列の生成 16 */ 17 18 //int型の整数値に変換可能な文字列が入力されるまで繰り返す 19 String input; 20 while (true) { 21 System.out.print("生成する配列の大きさを入力してください > "); 22 input = sc.nextLine(); 23 try { 24 Integer.parseInt(input); 25 break; 26 } catch (NumberFormatException | java.lang.NegativeArraySizeException e) { 27 System.out.println("配列の要素数として適していません。"); 28 } 29 } 30 31 32 int size = Integer.parseInt(input); 33 int[] arr = createRandomIntArray(size); 34 35 // 生成された配列を画面表示 36 System.out.print("生成された配列: "); 37 for (int a : arr) { 38 System.out.print(a + " "); 39 } 40 System.out.println(); 41 42 43 //配列の要素を取り出し 44 45 46 //\int型の整数値に変換可能な文字列が入力されるまで繰り返す 47 while(true) { 48 System.out.print("取り出す配列のインデックスを指定してください > "); 49 input = sc.nextLine(); 50 try { 51 Integer.parseInt(String.valueOf(arr[Integer.parseInt(input)])); 52 break; 53 } catch (NumberFormatException | java.lang.NegativeArraySizeException e) { 54 System.out.println("インデックスとして適していません。"); 55 } 56 } 57 58 int index = Integer.parseInt(input); 59 System.out.println("値: " + getValueByIndex(arr, index)); 60 } 61 62 63 // 指定された要素数で各要素がランダムな値を持つ配列を生成して返す 64 public static int[] createRandomIntArray(int size) { 65 66 // 配列の要素数として正しくない値が渡された場合の例外を捕捉し、その場合は要素数0の配列を生成する 67 int[] arr; 68 if(size < 0 || size >= Integer.MAX_VALUE) { 69 arr = new int[0]; 70 }else{ 71 arr = new int[size]; 72 } 73 74 Random random = new Random(); 75 for(int i = 0; i < arr.length; i++) { 76 arr[i] =random.nextInt(1000); // 0〜999まででランダム 77 } 78 79 return arr; 80 } 81 82 83 //配列とインデックスを渡し、その要素を取り出して返す 84 public static int getValueByIndex(int[] arr, int index) { 85 //引数arrがnullだった場合、-1を返す 86 if (arr == null) { 87 return -1; 88 } 89 90 // 配列のインデックスとして正しくない値が渡された場合の例外を捕捉し、その場合は-1を返す 91 try { 92 return arr[index]; 93 } catch (ArrayIndexOutOfBoundsException e) { 94 return -1; 95 } 96 } 97}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。