2013-10-14 84 views
0

Eclipse說變量age,agirl和aboy可能沒有被初始化。我在第一個if語句之前初始化變量,並且他們在if語句中獲得了值。當我想在下一個if語句中使用它們時,eclipse說本地變量可能沒有被初始化。 這裏是我的代碼:java本地變量沒有初始化if語句外

import java.util.Scanner; 

class Main{ 
public static void main(String args[]){ 
    Scanner input = new Scanner(System.in); 
    String define; 
    int aboy, agirl, age; 
    System.out.println("Are you a boy or a girl?"); 
    define = input.next(); 

    if (define.equals("boy")){ 
     System.out.println("What is your age?"); 
     aboy = input.nextInt(); 
     age = aboy; 
    }else if (define.equals ("girl")){ 
     System.out.println("What is your age?"); 
     agirl = input.nextInt(); 
     age = agirl; 
    }else 
     System.out.println("wrong answer"); 
    if (agirl >= 18 || aboy >= 16){ 
     System.out.println("You are a " + define + " and you are " + age + " years old"); 
    } 
} 
} 
+1

它們沒有初始化,初始化爲'int aboy = 10;' – RamonBoza

回答

0

不僅可能你有一個未初始化的變量,你保證到。

看看你的控制流程:你首先要求一個值爲define,然後你恰好執行其中一個塊。如果define"boy",則不需要初始化agirl;如果define"girl",那麼您不初始化aboy,並且如果define也不匹配,則根本不初始化任何變量。

看起來您正試圖通過在您的int s中具有「魔術」值來巧妙地組合booleanint的功能。這是設計不良,因爲它如何變魔術目前尚不清楚,但可以使您例如通過初始化所有int值運行0

int aboy = 0, agirl = 0, age = 0; 
1

此行

int aboy, agirl, age; 

包含聲明,不是初始化。 Java不會爲你初始化一個局部變量,並且有一個執行路徑(else),其中什麼都沒有分配給這些變量,那麼你試圖引用它們不存在的值。

在使用它們之前,必須在所有執行路徑中爲它們設置值。在聲明它們時將它們初始化爲某些東西。

+0

現在我得到聲明和初始化之間的區別!在第二個區塊中,它會檢查agirl和aboy,但其中一個沒有價值。這就是爲什麼你需要給他們以前的價值。非常感謝! – Frank

0

初始化被分配變量的值。 聲明正在創建變量。他們不一樣。

你需要初始化變量的原因是因爲它可能不會被初始化。所有if語句可能都是false,因此您需要給它們一個默認值。