为什么返回null而不是值?

时间:2013-10-11 00:59:36

标签: java random

我有以下代码,我想知道为什么在运行程序时返回null而不是实际值?任何帮助都会被证实。

import java.util.Random;


public class TestCard {

    public static String[] possCards = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
    public static String[] possSuits = new String[]{"C", "S", "H", "D"};
    public static Random rand = new Random();
    static String value;

    public static void main(String[] args) {
            System.out.println(getcard());
    }


    public static void card() {
        String card = possCards[rand.nextInt(possCards.length)];
        String suit = possSuits[rand.nextInt(possSuits.length)];

       value = card + suit;
    }
    public static String getcard(){
        return value;
    }


}

6 个答案:

答案 0 :(得分:5)

因为null 在程序运行时由值保存的值。

如果在调用card()之前没有调用任何赋予引用价值的方法(例如getCard()),为什么会有任何不同?

这里的关键是尝试在心理上逐步完成代码,看看它的作用。使用调试器执行代码或单步执行代码。

答案 1 :(得分:1)

您正在呼叫getcard(),但从不致电card(),因此永远不会设置value

答案 2 :(得分:1)

检查代码的以下部分:

    public static void main(String[] args) {
        System.out.println(getcard()); // printing getCard(), 
                                      //but card() isn't called before it!!
}


public static void card() {
    String card = possCards[rand.nextInt(possCards.length)];
    String suit = possSuits[rand.nextInt(possSuits.length)];

   value = card + suit; // assigning value in card() 
                        //but this function needs to get executed
}

答案 3 :(得分:0)

您应该调用card()函数:

public static void main(String[] args) {
        card();
        System.out.println(getcard());
}

答案 4 :(得分:0)

在调用getcard()之前,您需要调用card()来准备计算。

您的代码需要如下所示。

public static void main(String[] args) {
        card();
        System.out.println(getcard());
}

答案 5 :(得分:0)

您还可以在TestCard中使用静态代码块来为您初始化value

static{
    card();
}

所以你知道价值是非空的