【问题标题】:Java conditional statement not working as expectedJava 条件语句未按预期工作
【发布时间】:2017-01-10 19:47:45
【问题描述】:

我正在尝试覆盖 getItemViewType 并为我的页脚返回不同的视图类型,但函数内的整数比较失败:

此图像显示了一个调试会话,其中输入 position 为 21,私有列表 mValues 的大小为 21,但是当我按下“越过”时,条件代码被跳过。

如果两个整数相等,为什么position == mValues.size() 返回false?

我在运行之前清理并重建了我的项目。

更新:

当整数被硬编码时它可以工作:

但当我使用输入参数时不是:

更新

我在函数的第一行添加了一条 Log 语句

Log.e("MYAPP", "position: " + position + ", evaluates: " + (position == 21));

在我的显示器上我看到:position: 21, evaluates: true

但是,我在return FOOTER_VIEW; 处的断点从未被调用过,并且与页脚视图相关的函数也从未被调用过。

更新:

这是完整的适配器:https://gist.github.com/fergusom/79c6d5d9b1fd5e8348949d114a0159d5

请注意,我首先更新了代码以计算 boolean,但即使 boolean 在日志中打印出 true,它仍然失败

【问题讨论】:

  • mValues(运行时类型)是什么类型?您是否尝试进入 mValues.size()?你能验证它返回 21 吗?
  • 如果我把mValues.size()换成21还是不行,加了张图片说明这个
  • 不要相信调试器!将日志语句放在if 的内部和外部。
  • 由于代码优化,调试器可能会突出显示错误的行。
  • mValues 实际上是什么?

标签: java android


【解决方案1】:

不要给jvm机会:

if(new Integer(position).equals(new Integer(mValues.size()))

如果 Integer 构造函数失败,您将知道异常中的值是什么

【讨论】:

  • 我尝试更进一步并创建一个boolean 以在条件中使用,即使boolean 在日志中打印出true,它仍然失败。查看上次更新中的完整要点
  • 等等什么?你打印了一个布尔变量,给你真,它不在 if 语句中?
  • 是的。似乎是我的设备出现了故障。我重新启动了手机,它现在可以正常工作了
【解决方案2】:

我重新启动了手机,它开始工作了......

【讨论】:

  • 这很有趣:)
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2017-10-27
  • 1970-01-01
  • 2012-08-16
  • 2020-03-11
相关资源
最近更新 更多