2015-01-29 3 views
-6

Каждый раз, когда я пытаюсь скомпилировать это, он показывает мне, что переменная d1 не может быть инициализирована. Я думаю, проблема может возникнуть в else if. Скажите мне, как запустить 2 заявления в else if.Может ли кто-нибудь показать мне, почему он дает мне переменную, не инициализированную?

import java.util.Scanner; 
class IDC { 

    public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 

     System.out.println("      "); 
     System.out.println("Input ID card no..."); 

     String x = scan.next(); 


     x = x.substring(0, x.length() - 1); //removing the last char of the string 

     String CardNo = x; 

     String y = x = x.substring(0, x.length() - 7); //birthday 

     y = "19" + y; //birth year = y 




     String CardNO1 = CardNo.substring(0, CardNo.length() - 4); 

     //System.out.println(CardNO1); 

     CardNO1 = CardNO1.substring(2); 

     //System.out.println(CardNO1); 

     //gender 

     int g = Integer.parseInt(CardNO1); //converting string to int 
     String G; 
     if (g < 500) { 
      G = "Male"; 
     } else { 
      G = "female"; 
     } 
     //System.out.println(G); 
     double C = Integer.parseInt(CardNO1); 
     if (C > 500) { 
      C = C - 500; 
     } else { 
      C = C; 
     } 
     //calculating month and the day of birth 

     double d1; 
     int Month; 
     // 

     if (C < 31) { 
      Month = 1; 
      d1 = C; 
     } else if (C <= 60) { 
      Month = 2; 
      d1 = C - 31; 
     } else if (C <= 91) { 
      Month = 3; 
      d1 = C - 60; 
     } else if (C <= 121) { 
      Month = 4; 
      d1 = C - 91; 
     } else if (C <= 152) { 
      Month = 5; 
      d1 = C - 121; 
     } else if (C <= 182) { 
      Month = 6; 
      d1 = C - 152; 
     } else if (C <= 213) { 
      Month = 7; 
      d1 = C - 182; 
     } else if (C <= 244) { 
      Month = 8; 
      d1 = C - 213; 
     } else if (C <= 274) { 
      Month = 9; 
      d1 = C - 244; 
     } else if (C <= 305) { 
      Month = 10; 
      d1 = C - 274; 
     } else if (C <= 335) { 
      Month = 11; 
      d1 = C - 305; 
     } else if (C <= 366) { 
      Month = 12; 
      d1 = C - 335; 
     } else { 
      Month = 00; 
     } 
     //double d1; 

     System.out.println("      "); 

     System.out.println("Your Birthday... "); 
     System.out.println("Date.." + d1); 
     System.out.print("Month.. " + Month); 
     System.out.println(" Year.. " + y); 

     System.out.println("      "); 

     System.out.println("Your Gender..."); 
     System.out.println(G); 

    } 

} 
+4

Что произойдет, когда 'C> 366'? вы не инициализируете 'd1' в блоке' else' – BackSlash

+0

, пожалуйста, предоставьте код более чистого кода – Coffee

+4

Мессиальный код хитов за 100 очков. Ты мертвец. –

ответ

1

d1 не инициализируется в блоке еще, и в только в случае, иначе, если блоки, так что если все операторы, если(), и остальное, если() блоков ложно, то контроллер приходит к ELSE block, где d1 все еще не инициализируется. поэтому, когда вы пытаетесь получить доступ к нему внутри system.out.println(), компилятор правильно выдает ошибку. вы можете захотеть инициализировать значение до нуля в начале.

+0

Спасибо, сэр, он работает, я новичок в java, еще изучающем еще раз спасибо! –

Смежные вопросы