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");
}
}
它给了我四个错误:
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 ;
^
答案 0 :(得分:7)
您永远不会将值分配给Feb
,那么您希望这种比较能达到什么目的?
if (Feb >= 19)
考虑一下 希望通过这种比较实现的目标,然后找出需要改变的内容以实现目标。
通常,在明确分配之前,您无法从局部变量中读取 - 换句话说,直到编译器能证明您已经通过一些执行路径,为其赋值。
然而,我建议你仔细考虑一下整体设计,而不是试图用声明点分配的值进行编译。例如,您可能希望将双鱼座,白羊座等更改为枚举值。
此外,Java代码通常使用pascalCase
名称作为局部变量。
答案 1 :(得分:3)
您正在阅读从未写过的变量,例如您在第一个Feb
语句中从if
读取而没有写任何内容。
此外,代码中的某些代码路径会使ZodiacSign
局部变量未初始化,一旦您尝试读取它就会产生相同的错误。以此为例:
if(Feb>= 19){
ZodiacSign = Pisces ;
System.out.println("Your zodiac sign is Pisces");
}
else
{
System.out.println("Your zodiac sign is Aquarius");
}
如果Feb
小于19 ZodiacSign
,则代码片段末尾不会写入ZodiacSign
。第二个条件也可能会selection = input.nextInt();
未分配。
您所缺少的实际上是使用您从输入中读取的值来设置本地变量。也就是说,
之后selection
您应该使用Feb
中的值为March
,ZodiacSign
分配一些有用的值,依此类推。然后还要确保无论最终采用哪个代码路径,都会分配{{1}}。
此外,您的算法存在根本问题。您每个月都不需要变量。您只需输入两个变量:日期和月份,以及黄道十二宫的第三个变量。
答案 2 :(得分:-2)
更改以下行
int Feb,March,ZodiacSign,Pisces,Aquarius,Aries,Taurus;
到
int Feb=0,March=0,ZodiacSign=0,Pisces=0,Aquarius=0,Aries=0,Taurus=0;
方法变量在使用之前需要一些初始赋值。所以对所有其他方法变量也一样。