3

我有以下代码,想知道为什么在运行程序时返回 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;
    }


}
4

6 回答 6

5

因为 null程序运行时 value 所持有的值。

card()如果在调用之前不调用任何给值提供引用的方法,例如 , 为什么会有不同getCard()呢?

这里的关键是尝试在心理上一步一步地浏览你的代码,看看它做了什么。或者使用调试器单步执行您的代码。

于 2013-10-11T01:00:46.120 回答
1

你打电话getcard()但从不打电话card(),所以value永远不会设置。

于 2013-10-11T01:01:22.723 回答
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
}
于 2013-10-11T01:05:25.797 回答
0

您应该调用该card()函数:

public static void main(String[] args) {
        card();
        System.out.println(getcard());
}
于 2013-10-11T01:02:31.900 回答
0

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

您的代码需要如下所示。

public static void main(String[] args) {
        card();
        System.out.println(getcard());
}
于 2013-10-11T01:05:35.763 回答
0

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

static{
    card();
}

所以你知道 value 不为 null

于 2013-10-11T01:05:50.033 回答