2016-01-09 81 views
0

在android studio中,我的if/else語句中的變量「output」顯示爲灰色(從未使用過),然後在最後一行嘗試使用它時,出現錯誤,提示「無法解析符號輸出」。Java - 爲什麼我的if/else語句無法正常工作?

代碼:

public void calculate(View view) { 
    EditText userInput = (EditText) findViewById(R.id.user_input); 
    String numString = userInput.getText().toString(); 
    double num = new Double(numString).doubleValue(); 
    CheckBox ozCheckBox = (CheckBox)findViewById(R.id.oz); 
    boolean ozInput = ozCheckBox.isChecked(); 
    CheckBox gCheckBox = (CheckBox)findViewById(R.id.g); 
    boolean gInput = gCheckBox.isChecked(); 
    if(ozInput == true) { 
     double output = num*28.3495; 
    } else { 
     double output = num; 
    } 
    TextView textView = (TextView)findViewById(R.id.output_textview); 
    textView.setText(String.valueOf(output)); 
} 

回答

5

你聲明塊中的變量。任何局部變量超出了聲明塊的範圍。這就是爲什麼這些變量變灰的原因 - 它們不是,因爲它們聲明的塊在聲明後立即結束。

在這種情況下,這將是簡單的使用條件運算符:

double output = ozInput ? num * 28.3495 : num; 

,取代你的整個if/else聲明,並聲明變量在其可以可以在使用範圍內的撥打setText

0

你的變量用於超出範圍 - 看我的意見:

boolean gInput = gCheckBox.isChecked(); 
if(ozInput == true) { 
    //declared inside block 
    double output = num*28.3495; 
    //end of block - output becomes unknown  
} else { 
    //declare inside block 
    double output = num; 
    //end of block - outpt becomes unknown 
} 
TextView textView = (TextView)findViewById(R.id.output_textview); 
// output not known 
textView.setText(String.valueOf(output)); 

最簡單的方法來解決。將預分配給其他值:

double output = num; 
if(ozInput == true) { 
    //reassign value 
    output = num*28.3495; 
} 
//name output still known