Java配列境界問題のインスタンス解析

2666 ワード

Javaの配列初期化はOCと同じで、動的初期化と静的初期化に分けられます.
ダイナミック初期化ダイナミック初期化:長さを指定し、システムによって初期化値を与えます.
静的初期化:初期化値を与え、システムによって長さを与える
配列を使用するときに最も起こりやすいのは配列境界問題です

     int [][] array = {{1,2,3},{1,4}};
    System.out.println(array[1][2]);

これは2 D配列です.配列が境界を越えていることが明らかです.コンソールには次の情報が印刷されます.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

 at demo.Array.main(Array.java:31)

31行に正確に位置決めされています.
完全なコードの例を次に示します.

package home_work_4_17;
abstract class Employee{
	abstract double earnings();
}
class YearWorker extends Employee{
	double earnings(){
		System.out.println("    1000");
		return 1000;
	}
}
class MonthWorker extends Employee{
	double earnings(){
		System.out.println("    100");
		return 100;
	}
}
class WeekWorker extends Employee{
	double earnings(){
		System.out.println("     10");
		return 10;
	}
}
class Company{
	int n;
	//      
	public Company(int n) {
		this.n=n;
		// TODO Auto-generated constructor stub
	}
	Employee E[]=new Employee[n];
	double cal(){
		//      
		double sum=0;
		for (int j=0;j 
 

コンパイラは配列境界エラーを表示します.
チェックした結果、スクライブ部分の文にエラーが発生しました.
以下の修正を行う必要があります.

class Company{
  int n;  //      
   Employee E[]; 
  public Company(int n) {
    this.n=n;// TODO Auto-generated constructor stub
    E=new Employee[n];  
   }
  double cal(){    //      
    double sum=0;
    for(int j=0;j 
 

エラーの原因は、Company構築方法で配列Eが初期化されていないため、E配列サイズが0のまま配列境界エラーが発生したためです.
上記のエラー方式で作成したテストプログラムは以下の通りです.

package test_a;
class people{
  int n;
  Student s[]=new Student[n];
  public people(int n) {
    this.n=n;// TODO Auto-generated constructor stub
  }
}
class Student{
  int number;
}
public class Cdcs {
  public static void main(String args[]) {
    people p=new people(3);
    System.out.println(p.s.length);
  }
}

出力結果は0です.すなわち、配列サイズはゼロです.
まとめ
以上がJava配列の境界問題の実例解析のすべてであり,皆さんの役に立つことを願っている.興味のある方は、引き続き当駅:Java異常終了条件の判断例コード、Javaプログラミング異常処理ベストプラクティス【推奨】などを参照してください.何か問題があったらいつでも伝言を残して、編集者はすぐにみんなに返事します.