Java - 为什么我的if / else语句无法正常工作?

时间:2016-01-09 07:56:09

标签: java android

在android studio中,我的if / else语句中的变量“output”显示为灰色(从未使用过),然后在我尝试使用它的最后一行时出现错误,说“无法解析符号输出”

代码:

> db.Releases.find({epoch_time: {$gte: 1451417675, $lt: 1483717675}})
{ "_id" : ObjectId("5682bbcbab755688f9bfd939"), "release_id" : 3, "event_id" : 1, "epoch_time" : 1451417675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93a"), "release_id" : 4, "event_id" : 2, "epoch_time" : 1452717675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93b"), "release_id" : 5, "event_id" : 2, "epoch_time" : 1453717675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93c"), "release_id" : 6, "event_id" : 3, "epoch_time" : 1461207675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93d"), "release_id" : 7, "event_id" : 3, "epoch_time" : 1461407675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93e"), "release_id" : 8, "event_id" : 4, "epoch_time" : 1461417675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93f"), "release_id" : 9, "event_id" : 1, "epoch_time" : 1472717675 }
{ "_id" : ObjectId("5682bbd1ab755688f9bfd940"), "release_id" : 10, "event_id" : 5, "epoch_time" : 1473717675 }

2 个答案:

答案 0 :(得分:5)

您正在声明块内的变量。任何局部变量都超出了它声明的块之外的范围。这就是为什么这些变量是灰色的 - 它们不会在任何地方使用,因为它们声明的块在声明之后立即结束。

在这种情况下,使用条件运算符会更简单:

double output = ozInput ? num * 28.3495 : num;

它取代了您的整个if / else语句,并在setText调用中可以使用的范围内声明该变量。

答案 1 :(得分: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 ) );

最简单的解决方法是预先分配else-value:

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