java - pseint - Es posible que las variables no se hayan inicializado
manejo de gridlayout en java (3)
Cambiar la siguiente línea
int Feb,March,ZodiacSign,Pisces,Aquarius,Aries,Taurus;
a
int Feb=0,March=0,ZodiacSign=0,Pisces=0,Aquarius=0,Aries=0,Taurus=0;
Las variables de método necesitan una asignación inicial antes de ser utilizadas. Haz lo mismo con todas las otras variables de método.
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");
}
}
Me da cuatro errores:
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 ;
^
Está leyendo variables que nunca se han escrito, por ejemplo, lee desde Feb
en la primera declaración if
sin haberle escrito nada.
Además, algunas de las rutas de código a través de su código dejan la variable local ZodiacSign
inicializar, lo que producirá el mismo error una vez que intente leerlo. Toma por ejemplo esto:
if(Feb>= 19){
ZodiacSign = Pisces ;
System.out.println("Your zodiac sign is Pisces");
}
else
{
System.out.println("Your zodiac sign is Aquarius");
}
Si Feb
es menor que 19, ZodiacSign
no se habrá escrito al final del fragmento de código. El segundo condicional también puede dejar ZodiacSign
sin asignar.
Lo que te estás perdiendo es usar el valor que leíste desde la entrada para establecer tus variables locales. Es decir, después
selection = input.nextInt();
debe usar el valor en la selection
para asignar algunos valores útiles a Feb
, March
, etc. Luego también asegúrese de que se asigne ZodiacSign
sin importar qué ruta de código se tome.
Además, hay un problema fundamental con su algoritmo aquí. No necesita una variable para cada mes. Solo necesita dos variables para su entrada: día y mes y una tercera para el signo zodiacal.
Nunca le asigna un valor a Feb
, entonces, ¿qué espera que logre esta comparación?
if (Feb >= 19)
Piensa en lo que realmente querías lograr con esa comparación, y luego calcula qué necesitas cambiar para que suceda.
En general, no puede leer desde una variable local antes de asignarla definitivamente ; en otras palabras, hasta que el compilador pueda probar que habrá pasado por alguna ruta de ejecución que le asigna un valor.
Sin embargo, en lugar de intentar simplemente compilar con los valores asignados en el momento de la declaración, le sugiero que tenga una idea más detallada sobre su diseño general. Es probable que desee cambiar Piscis, Aries, etc. para que sean valores enumerados, por ejemplo.
Además, el código Java generalmente usa los nombres pascalCase
para variables locales.