1publicclassTest{2privateint number;3privateint[] x;4privateint[] y;5privateint a =10;6privateint b =30;78publicTest(String name){910switch(name){11case"first":12this.number =5;13 x =newint[number];14 y =newint[number];15for(int i =0; i < number; i++){16this.x[i]= a;17}18this.y[0]= b;19for(int i =1; i < number; i++){20this.y[i]=this[i-1]+ b;21}22break;23case"second":24this.number =8;25 x =newint[number];26 y =newint[number];27for(int i =0; i < number; i++){28this.x[i]= a *2;29}30this.y[0]= b *3;31for(int i =1; i < number; i++){32this.y[i]=this[i-1]+ b *3;33}34break;35}36}37}
可能です。
今回のエラー原因は、メンバ変数x,yの宣言時に値の設定されていないnumberを配列のサイズとして指定しているためです。
なので、単純にコンストラクタ内でメンバ変数x,yを初期化するように書き換えれば問題ないと思います。
以下が一部の例
---
switch(name) {
case "first":
int number = 5;
x = new int[number];
y = new int[number];
for(int i = 0; i < number; i++) {
this.x[i] = a;
}
---
0
ベストアンサー
以下のコードで確認すると、int[]x,int[]yの配列の長さは
最初にprivate int number=1;
として入れた長さ1になっていて、
this.number = 5;
としてnumberの値を入れ替えても配列の長さは変わず1のままな事が分かります
この状態で配列の長さは1なのに
for(int i = 0; i < number; i++) {
で入れ替えたnumberの数5回分だけfor分を回転させて
中でx[]の中身をx[4]まで操作しようとするため、存在しないx[1]~x[4]までを参照しようとして
エラーが出るのです
java
1publicclass R2{2privateint number=1;3privateint[] x =newint[number];4privateint[] y =newint[number];5int a=10;6int b=12;789publicR2(String name){1011switch(name){12case"first":13this.number =5;14for(int i =0; i < number; i++){15System.out.println("2");16this.x[i]= a;17}18this.y[0]= b;19for(int i =1; i < number; i++){20this.y[i]=this.y[i-1]+ b;21}2223}2425}26publicstaticvoidmain(String[] args){27282930R2 xc=newR2("first");31323334}35363738}
コンストラクタの引数ごとに配列の長さを変えられるようにしたのが以下です
java
1classTest{2privateint number =1;3int[] x =newint[number];4int[] y =newint[number];5privateint a =10;6privateint b =30;78publicTest(String name){910switch(name){11case"first":12this.number =5;13 x =newint[number];14for(int i =0; i < number; i++){15this.x[i]= a;16}17 y =newint[number];18this.y[0]= b;19for(int i =1; i < number; i++){20this.y[i]=this.y[i -1]+ b;21}22break;23case"second":24this.number =8;25 x =newint[number];26for(int i =0; i < number; i++){27this.x[i]= a *2;28}29 y =newint[number];30this.y[0]= b *3;31for(int i =1; i < number; i++){32this.y[i]=this.y[i -1]+ b *3;33}34break;35}36}37}3839class E2 {4041publicstaticvoidmain(String[] args){4243Test a =newTest("first");44Test b =newTest("second");4546for(int c : a.x){47System.out.print(c +"-");48}49System.out.println();5051for(int c : a.y){52System.out.print(c +"-");53}54System.out.println();5556for(int c : b.x){57System.out.print(c +"-");58}59System.out.println();6061for(int c : b.y){62System.out.print(c +"-");63}6465}6667}