尽管变量没有初始化,但它与其他有效的变量相同

时间:2017-03-10 20:04:02

标签: java variables initialization

我对一般以及本网站的编码都很陌生,所以对任何帮助表示赞赏!

我生成的这个简短代码不会运行,因为变量str不会初始化。 它似乎与其他几个按预期运行的变量相同。

我的问题是为什么会发生这种情况以及如何解决这个问题。

这是代码

package firstgameattempt1;

import java.util.Scanner;

public class CreateChar {
    public static void main (String Args[]){

        System.out.println( "please enter your Characters name");
        Scanner in = new Scanner (System.in); 
        String Cname = in.next();
        System.out.println("so your name is ");
        System.out.println(Cname);
        System.out.println("thats the dumbest thing ive ever heard");

        int str;
        int intelligence;
        int speed;
        int hp;
        int maxhp;

        System.out.println("enter 1 if you are a warrior, 2 if you are a mage, or 3 if you are a thief ");
        int Cclass = in.nextInt();
        if (Cclass == 1 ) 
            str = 10;
        intelligence = 5;
        speed = 7;
        hp= 100;
        maxhp = 100;
        System.out.println ("your strength is");

        //here is the problem
        System.out.println (str);
        //here is the problem

        System.out.println ("your intelligence is");
        System.out.println (intelligence);
        System.out.println ("your speed is");
        System.out.println (speed);
        System.out.println ("you have ");
        System.out.println (hp);    
        System.out.println ("hitpoints");
    }
}

2 个答案:

答案 0 :(得分:1)

这个问题正在发生

int str;

在创建时未初始化(例如设置为= 0)。

您确实有代码将值设置为10,但只有当if(Cclass==1)语句的条件为true时才会发生这种情况,因此如果该语句为false,{ {1}}将保持未初始化状态。无论是否str,都要确保它始终具有值。

答案 1 :(得分:0)

从缩进中我假设您希望所有赋值都是if语句的一部分。把它放在一个块里面,如下:

if (Cclass == 1 ) {
        str = 10;
        intelligence = 5;
        speed = 7;
        hp= 100;
        maxhp = 100;
}

但是,您仍然会收到有关变量可能尚未初始化的警告,这是正确的。看看代码。无论以前发生过什么,你都在使用(打印)变量,但初始化是有条件的。你可以这样做:

if (Cclass == 1 ) {
        str = 10;
        ...
} else { 
    str = 0;
    ...
}

另一种方法是在之前初始化它们:

int str = 0;
...
if (Cclass == 1 ) {
        str = 10;
        ...
} 

可能这些都不适合你的情况,但关键是Java不允许使用未初始化的变量,并且在编译时检查它。

我不知道您是否尝试过编写Python代码,但您的错误对于Python代码来说非常典型。在Java中,缩进对语法没有任何作用。在Python中,您使用缩进来指定块。在Java和许多其他语言中,您使用{}代替。