variable pseint manejo initcomponents inicializada gridlayout error borderlayout java variables initialization

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.