为什么变量不存储此java程序中的值?

时间:2012-06-13 00:25:47

标签: java string variable-assignment

我收到一个错误,即该变量可能未初始化。我使用普通的字符串数据类型和if..else语句进行决策。这是一个关于向用户发出5张随机卡的程序。我想,如果在if else语句的第一个语句中出现错误,我认为变量赋值方法是正确的,甚至在其他程序中尝试过,它也适用于那些。有人能找到这个中的错误吗?

import java.util.Random;
public class RandomCard 
{
public static void main(String[] args)
{
    int cardNumber;
    int cardSign;
    String sign;
    Random card = new Random();
    for(int counter = 0; counter < 5; counter++)
    {

        cardSign = card.nextInt(4);

        if(cardSign == 0)
        {
            sign = "Spades";
        }

        else if(cardSign == 1)
        {
            sign = "Hearts";
        }

        else if(cardSign == 2)
        {
            sign = "Clubs";
        }

        else if(cardSign == 3)
        {
            sign = "Diamond";
        }



        cardNumber = 1 + card.nextInt(13);
        if(cardNumber>1 && cardNumber<11)
        {
            System.out.print(sign + " ");
            System.out.println(cardNumber);
        }

        else if(cardNumber == 11)
        {
            System.out.print(sign + " ");
            System.out.println("Jack");
        }

        else if(cardNumber == 11)
        {
            System.out.print(sign + " ");
            System.out.println("Jack");
        }

        else if(cardNumber == 12)
        {
            System.out.print(sign + " ");
            System.out.println("Queen");
        }

        else if(cardNumber == 13)
        {
            System.out.print(sign + " ");
            System.out.println("King");
        }

        else if(cardNumber == 1)
        {
            System.out.print(sign + " ");
            System.out.println("ACE");
        }

    }

}

}

5 个答案:

答案 0 :(得分:2)

更改

String sign;

String sign=null;

Java编译器始终会检查引用是否保证具有赋值(甚至为null),然后才能读取/使用该引用。 Dan Spiteri在没有String sign=null的情况下为您提供了good example如何做到这一点。

答案 1 :(得分:2)

初始化 String sign = null 或在else语句的if语句末尾提供默认值。

if(){
} else if() {
} else {
// default value for sign here
}

答案 2 :(得分:0)

总是尝试初始化所有变量。

int cardNumber = 0;
int cardSign = 0;
String sign = null;

用任何语言。

答案 3 :(得分:0)

默认情况下,局部变量没有初始值。因此,您需要在使用它们之前进行初始化。

请注意java中的String是不可变的,因此当您指定sign = "Spades";时,它基本上会创建一个新对象。为了实现这一点,它需要具有可以是""null的初始值。 int变量cardNumber不是这种情况。

答案 4 :(得分:0)

这是一个样本设计,你最好不要偷窃,模仿:

http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html