变量可能尚未初始化

1 java variables initialization

import java.util.Scanner;

public class ZodiacSign{

        public static void main(String args[]){

        Scanner input = new Scanner(System.in);
        int   Feb,March,ZodiacSign,Pisces,Aquarius,Aries,Taurus;

        int selection;
        System.out.println("Feb");

        System.out.println("Feb 1,2,3,4\n Feb 5,6,7,8\n Feb 9,10,11,12\n Feb 13,14,15,16\n Feb 17,18,19,20\n Feb 21,22, 23, 24\n Feb25,26,27,28\n March 1,2,3,4\n March 5,6,7,8\n March 9,10,11,12\n March 13,14,15,16\n March17,18,19,20\n March 21,22,23,24\n March 25,26,27,28\n March 29,30,31");
        System.out.println("Please enter your date of birth");
        System.out.println("Please enter your month of birth");


        selection = input.nextInt();
        if(Feb>= 19){
            ZodiacSign = Pisces ;
            System.out.println("Your zodiac sign is Pisces");
        }   
        else
        {
            System.out.println("Your zodiac sign is Aquarius");
        }
        if(March>=22){
            ZodiacSign = Aries;
            System.out.println("Your zodiac sign is Aries");
        }
        else
        { 
            System.out.println("Your zodiac sign is Taurus");
        }
            System.out.println("End of Program");



        }
}
Run Code Online (Sandbox Code Playgroud)

它给了我四个错误:

ZodiacSign.java:19:error: variable Feb might not have been initialized
                if(Feb>= 19){
                   ^
ZodiacSign.java:20:error: variable Pisces might not have been initialized
                       ZodiacSign= Pisces ;
                                   ^ 
ZodiacSign.java:27:error: variable March might not have been initialized
         if(March>= 22){
            ^
ZodiacSign.java:28:error: variable Aries might not have been initialized
           ZodiacSign= Aries ;
                       ^
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

你永远不会一个值赋值Feb,所以你期望这个比较能达到什么目的?

if (Feb >= 19)
Run Code Online (Sandbox Code Playgroud)

考虑一下你真正希望通过这种比较实现的目标,然后找出你需要改变的东西来实现它.

通常,在明确赋值之前,您无法从局部变量中读取- 换句话说,直到编译器可以证明您已经通过某个执行路径为其赋值.

但是,我建议您仔细考虑一下您的整体设计,而不是仅仅尝试使用在声明点分配的值进行编译.例如,您可能希望将双鱼座,白羊座等更改为枚举值.

此外,Java代码通常使用pascalCase局部变量的名称.