[英]Getter for java array returns null
當我使用getter返回數組的值時,它聲明為null。 但是,如果我在類構造函數之外定義數組,則不會發生這種情況,不幸的是,由於它是由for循環定義的,因此它必須在構造函數中。 吸氣劑:
public static String[] getLetters(){
return dispLetter;
}
定義數組的for循環:
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];
在其他類中引用的循環:
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;
}
}
在構造函數中初始化靜態成員通常不是一個好主意。 你引用dispLetter
之前它已在初始化Dice()
構造函數。 從dispLetter
及其getter方法中刪除static
修飾符
然后,此更改后代碼應該可以正常工作:
更換
grid[i]=new JLabel(" "+Dice.getLetters()[i]+" ");
與
grid[i]=new JLabel(" "+(new Dice().getLetters()[i])+" ");
要么
如果您真的認為dispLetter
應該保持static
,則將構造函數中的代碼移動到靜態initialzer塊:
static {
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 Dice() {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.