【问题标题】:Syntax error on token "boolean", invalid Expression标记“布尔”的语法错误,无效的表达式
【发布时间】:2014-01-07 17:21:34
【问题描述】:

-我在 if/else 部分或下面的代码中遇到“令牌“布尔”的语法错误,无效的表达式”错误。在所有“else/if”行上出现此错误 3 次。

-我遇到的另一个错误是在最后一个“else”上,我必须插入一个“;”在没有解决任何问题的语句之后。

package com.dey2929.bmihealth;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

public class ResultActivity extends Activity {
TextView result;
TextView review;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);
    result = (TextView) findViewById(R.id.tvmybmi);
    review = (TextView) findViewById(R.id.review);
     Intent intent = getIntent();
     String YourBmi = intent.getStringExtra("YourBmi");
     result.setText(" Your BMI is: " + YourBmi);
      if (boolean.valueof(YourBmi) <= 18.0)
      {
          review.setText("You are Underweight ");

      }
      else if ((boolean.valueof(YourBmi) > 18.0 && boolean.valueof(YourBmi) < 25.0 ))
      {
          review.setText("You are Normal (healthy weight) ");
      }
      else ((boolean.valueof(YourBmi)) > 25.0)
      {
          review.setText("You are Overweight");
      }


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.result, menu);
    return true;
}
@Override
protected void onPause() {
    super.onPause();
    finish();
}

}

更新:

EDIT- 仅在最后一个 else 行留下错误,即

  • 赋值的左边必须是一个变量 - 语法错误,插入“;”完成声明
    • 插入赋值运算符表达式以完成赋值。

修改代码:

package com.dey2929.bmihealth;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

public class ResultActivity extends Activity {
TextView result;
TextView review;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);
    result = (TextView) findViewById(R.id.tvmybmi);
    review = (TextView) findViewById(R.id.review);
     Intent intent = getIntent();
     String YourBmi = intent.getStringExtra("YourBmi");
     result.setText(" Your BMI is: " + YourBmi);
      if (Float.parseFloat(YourBmi) <= 18.0)
      {
          review.setText("You are Underweight ");

      }
      else if ((Float.parseFloat(YourBmi) > 18.0 && Float.parseFloat(YourBmi) < 25.0 ))
      {
          review.setText("You are Normal (healthy weight) ");
      }
      else (Float.parseFloat(YourBmi) > 25.0)
      {
          review.setText("You are Overweight");
      }


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.result, menu);
    return true;
}
@Override
protected void onPause() {
    super.onPause();
    finish();
}

}

【问题讨论】:

  • boolean.valueof(YourBmi) 那是什么?可能你在找Double.valueOf(bmi) &lt;= 18.0
  • 我把我的答案放在下面。你必须把 else if 放在最后一个 else 中。
  • 我说你最后一个 else lite 从 else 到 else if。我在下面的答案中写了它。

标签: java android adt


【解决方案1】:

以下无效

  if (boolean.valueof(YourBmi) <= 18.0)

改成

  if (Float.parseFloat(YourBmi) <= 18.0)

我假设YourBmi 将在String 形式中包含浮点数

【讨论】:

  • 它是一个转换为字符串的布尔值,我将再次转换为布尔值进行比较。
  • 如何转换大于或等于 18.0 的布尔值(真/假)?
  • 上述两行错误已解决。只有最后一行给出错误:else ((Float.parsefloat(YourBmi)) > 25.0)
  • 它是 parseFloat ,还请阅读 javadoc 你会有更好的主意
  • @user3116603 你为什么不直接通过你的意图传递一个浮点值?
【解决方案2】:

boolean 不是一个类,你不能在它上面调用方法(比如.valueOf)。查看Boolean;注意大写B。

【讨论】:

  • 我知道他不想调用 Boolean.valueOf;但一步一步。抱怨是语法错误,修复所有错误的完整答案不会教给基本问题的解决方案,即混淆原始类型和类。我想一旦他遇到不同的错误,我们将讨论这些;往往会留下受过更多教育的读者。
  • 更改后它甚至不会编译,因为
  • 是的。我们就是这样做的,一次一个编译错误! (我完全同意你的答案是正确的,并且投票支持你;我只是认为保持布尔/布尔讨论对提问者可见很重要。)
【解决方案3】:

假设您的“YourBmi”具有双精度值,请进行以下更改:

已编辑:我更改了 else if 代码。它有很多括号,并在最后一个 if 中添加另一个。

  if (Double.valueOf(YourBmi) <= 18.0)
  {
      review.setText("You are Underweight ");

  }
  else if (Double.valueOf(YourBmi) > 18.0 && Double.valueOf(YourBmi) < 25.0 )
  {
      review.setText("You are Normal (healthy weight) ");
  }
  else if(Double.valueOf(YourBmi) > 25.0)
  {
      review.setText("You are Overweight");
  }

【讨论】:

  • 错误当我尝试这是在else if(Double.valueOf(YourBmi) &gt; 25.0) { 行中的错误:-赋值的左侧必须是变量-语法错误,插入“AssignmentOperator Expression”以完成赋值
  • 尝试清除您的代码。项目->清除->您的项目。在我的代码中它的工作原理。
【解决方案4】:

您已经知道为什么这不能编译,但是您可以通过直接通过您的意图传递一个 double 来简化您的生活。

如果您从 EditText 中获取此值,请在第一个活动中将其解析为双精度,这样可以避免您在第二个活动中制作所有这些内容:

Intent i = new Intent(firstActivity.this, ResultActivity.class);
i.putExtra("doubleValue", 17.0);
startActivity(i);

然后就这样做:

double d = getIntent().getDoubleExtra("doubleValue", 0.0);

这将避免您将 String 解析为 float 并将您的比较简化为简单的 if(d &lt;= 16.0) 等。

【讨论】:

  • 对不起,它是一个双精度值,不是从 EditText 浮动的。
  • @user3116603 然后使用getDoubleExtra
  • @user3116603 else (Float.parseFloat(YourBmi) &gt; 25.0) 摆脱(Float.parseFloat(YourBmi) &gt; 25.0)
  • 代码正在被编译。谢谢你 !但我得到的唯一输出是“你体重过轻”。对于 bmi 的所有值,无论是否超过 18,输出都是相同的。请帮忙!
  • @user3116603 检查值(在日志中添加打印语句),你会看到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多