Переменные, возможно, не были инициализированы - PullRequest
1 голос
/ 27 ноября 2011
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 ;
                       ^

Ответы [ 3 ]

7 голосов
/ 27 ноября 2011

Вы никогда не присваиваете значение Feb, так чего вы ожидаете от этого сравнения?

if (Feb >= 19)

Подумайте о том, что вы действительно хотел добиться этого сравнения, а затем решить, что нужно изменить, чтобы это произошло.

В общем, вы не можете читать из локальной переменной, пока ей не будет определенно присвоено - другими словами, пока компилятор не сможет доказать , что вы прошли через какой-то путь выполнения, который присваивает ему значение.

Однако вместо того, чтобы пытаться просто компилировать его со значенияминазначенный на момент объявления, я бы посоветовал вам более тщательно продумать свой общий дизайн.Вы, вероятно, хотите изменить, например, на Рыбы, Овен и т. Д. На значения enum.

Кроме того, Java-код обычно использует pascalCase имена для локальных переменных.

3 голосов
/ 27 ноября 2011

Вы читаете переменные, в которые никогда не записывались, например, вы читаете из 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 назначено независимо от того, какой путь кода заканчивается.

Кроме того, здесь есть фундаментальная проблема с вашим алгоритмом.Вам не нужна переменная для каждого месяца.Вам нужно всего две переменные для ввода: день и месяц и третья для знака зодиака.

0 голосов
/ 27 ноября 2011

Измените следующую строку

int   Feb,March,ZodiacSign,Pisces,Aquarius,Aries,Taurus;

до

int   Feb=0,March=0,ZodiacSign=0,Pisces=0,Aquarius=0,Aries=0,Taurus=0;

Переменные метода требуют некоторого начального назначения перед использованием. Сделайте то же самое со всеми другими переменными метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...