我有以下代码,我想知道为什么在运行程序时返回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;
}
}
答案 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();
}
所以你知道价值是非空的