ゲッターを使用して配列の値を返すと、nullが宣言されます。しかし、クラスコンストラクタの外側に配列を定義すると、これは発生しません。残念なことに、コンストラクタ内にある必要があるforループによって定義されています。 ゲッター:配列を定義forループgetter for java array nullを返します
public static String[] getLetters(){
return dispLetter;
}
ザ:
for(int i=0; i<16; i++){
int letterSelect = (int) (Math.random()*6+1);
System.out.print(letterSelect+",");
dispLetter[i]=letters[dice[i]-1][letterSelect-1];
ループは、それが他のクラスにrefrencedされた:
for(int i=0; i<16;i++){
grid[i]=new JLabel(" "+Dice.getLetters()[i]+" ");
grid[i].setFont(new Font("Arial", Font.BOLD, 68));
grid[i].setHorizontalAlignment(SwingConstants.CENTER);
grid[i].setVerticalAlignment(SwingConstants.CENTER);
}
全体の "ダイス" クラス必要に応じて:
package excersize.pkg9;
import java.util.Random;
public class Dice {
private static String dispLetter[] = new String[16];
public Dice() {
int dice[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
for (int i = 0; i < dice.length; i++) {
dice[i] = i + 1;
}
Random rnd = new Random();
for (int i = 0; i < dice.length; i++) {
int changeBy = rnd.nextInt(dice.length);
int value = dice[i];
dice[i] = dice[changeBy];
dice[changeBy] = value;
}
for (int i = 0; i < dice.length; i++) {
System.out.print(dice[i] + ",");
}
String letters[][] = new String[][]{
{"A","F","P","K","F","S"},
{"E","T","T","R","L","Y"},
{"D","E","Y","L","V","R"},
{"C","P","O","H","A","S"},
{"I","Y","S","D","T","T"},
{"N","E","E","H","G","W"},
{"R","N","Z","N","L","H"},
{"R","D","I","X","E","L"},
{"Qu","N","M","I","H","U"},
{"T","S","E","I","S","O"},
{"T","T","O","A","O","W"},
{"V","T","H","R","W","E"},
{"S","I","E","N","E","U"},
{"T","U","I","C","O","M"},
{"B","O","A","J","O","B"},
{"G","A","E","A","N","E"},
};
System.out.println();
for(int i=0; i<16; i++){
int letterSelect = (int) (Math.random()*6+1);
System.out.print(letterSelect+",");
dispLetter[i]=letters[dice[i]-1][letterSelect-1];
}
System.out.println();
for(int i=0; i<dispLetter.length; i++){
System.out.print(dispLetter[i]+",");
}
}
public static String[] getLetters(){
return dispLetter;
}
}
実際にゲッターを起動するコードを表示したいと思うかもしれません。 – ChiefTwoPencils
'dispLetter'は静的です。初期化はできません。それは一般的に悪い兆候です。 'dispLetter'は最初は静的であってはならないか、初期化は静的初期化子ブロックに移動する必要があります。 –
あなたは 'dice []'を繰り返し実行し、すでに1-16の数字を持つ1-16の数字を入れます。作業の冗長性がそこで発生しました。 – msagala25