2012-12-22 53 views
1

可能重複:
Variable not Initialized - Although I am?局部變量可能不被初始化

我是相當新的編程,所以我想嘗試做一個簡單的計算器,這是不特定於一個符號像+。無論如何,我不太清楚爲什麼這不起作用,因爲據我所知,我做的一切都是正確的。

import java.util.Scanner; 

public class calculator2 { 

    public static void main(String args[]){ 

     Scanner tom = new Scanner(System.in); 
     double fnum, snum, answer; 
     int symbol; 


     System.out.println("Enter First Number"); 
     fnum = tom.nextDouble(); 

     System.out.println("Enter Comand, 1 = add, 2 = subtract, 3 = divide, 4 = multiply"); 
     symbol = (int)tom.nextDouble(); 

     System.out.println("Enter Second Number"); 
     snum = tom.nextDouble(); 

     switch (symbol){ 

     case 1:   
      answer = fnum + snum; 

     case 2:   
      answer = fnum - snum; 

     case 3:   
      answer = fnum/snum; 

     case 4:   
      answer = fnum * snum;  
     } 

     System.out.println(answer); 
    } 
} 
+0

提示:標籤與*您使用的是*語言的問題。 '變量'和'本地'可能涉及任何語言,並且通用性很強,以至於他們不會有很多追隨者。另外,不要在Stackoverflow的代碼中使用製表符。 –

回答

1

這是因爲你沒有初始化answer變量,你switch聲明缺少default情況來分配它。 Java編譯器的原因是,如果symbol而不是1..4,那麼當您將它傳遞到println時,answer將保持未初始化。

你要麼可以在申報點設置answer一些初始值,或default情況下添加到switch

+0

這是錯誤的,默認情況下是可選的。 –

+0

@ChrisMcCabe我加了一些說明。謝謝! – dasblinkenlight

0

你需要給fnum,snum,當你聲明它們時回答一個符號的值,或者java不能保證它有一個值可以在進一步的計算中使用。

1

要麼聲明變量(初始化)時缺省值分配給它,或提供一個默認情況下向開關:

選項1:

double answer = 0; 

選項2:

switch(symbol) { 
    case 1: 
     ... 
    default: 
     answer = 0; 
} 

請注意,您的代碼中存在嚴重錯誤:您的案例的每個代碼塊應以break;結尾,即

switch(symbol) { 
case 1: 
    answer = fnum + sum; 
    break; 
etc 
default: 
    answer = 0; 
} 

否則,對於以下情況的所有代碼也會執行。一個開關盒就像一個goto。

0

或者你爲你的switch語句添加一個默認子句,或者你需要初始化你的答案變量。

此外,您的代碼可能是越野車,因爲'切換'通過'。當case語句中的條件得到滿足時,下列case語句也將被執行,直到出現break(或return)語句。

如果我是你情我願的代碼是這樣的:

double fnum = 0, snum = 0, answer 0; 
int symbol = 0 

... 

switch (symbol){ 

    case 1: 

     answer = fnum + snum; break; 

    case 2: 

     answer = fnum - snum; break; 

    case 3: 

     answer = fnum/snum; break; 

    case 4: 

     answer = fnum * snum; break; 
    default: 

    }