※ ChatGPTを利用し、要約された質問です(原文:なんで例外出力されるんですか?)
なぜ例外が出力されるのか?
このQ&Aのポイント
プログラム中で発生したjava.lang.ArrayIndexOutOfBoundsExceptionという例外の原因と意味を説明します。
配列を操作するメソッドの中で、不正なインデックスを使って配列にアクセスしてしまった場合に、java.lang.ArrayIndexOutOfBoundsExceptionという例外が発生します。
実際のコードの中で例外が出力される場所とその原因を解説します。ソースコード内のidexやnの値によって、配列の範囲外にアクセスしてしまい、例外が発生する可能性があります。
また恥を忍んで理解の為動かないソースを載せます。
idexの入力値が1だとしてnの入力値が3の話をします
このソースを実行させると以下の例外が出力されます
java.lang.ArrayIndexOutOfBoundsException
この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。
ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか
メソッド部分のint[] tmp=new int[a.length-n];
for(int i=idex+n; i<a.length; i++){
tmp[i]=a[i];
}
return tmp;
}
はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています
で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか?
import java.util.Scanner;
public class Ensyuu725 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int []a=new int[]{1,3,4,7,9,11};
for(int i=0; i<a.length; i++){
System.out.println("配列aの要素は"+"a["+i+"]"+a[i]);
}
System.out.print("削除する a[idx]:");
int idex=sc.nextInt();
System.out.print("a[idex]から何個削除しますか?");
int n=sc.nextInt();
int k[]=arrayRmvOfn(a,idex,n);
for(int i=0; i<k.length; i++){
System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]);
}
}
/**
* @param a
* @param idex
* @param n
* @return tmp
*/
private static int[] arrayRmvOfn(int[] a, int idex, int n) {
int[] tmp=new int[a.length-n];
for(int i=idex+n; i<a.length; i++){
tmp[i]=a[i];
}
return tmp;
}
}
ご指導お願いします。
お礼
返すは配列は0から2までなのに4~5の範囲の値を代入してしまって例外出力されたんですね そりゃ起きますね、なんで質問するときまではわからなかったんだろ