簡體   English   中英

Java數組的Getter返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM