Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAva/Android-添加到long中没有效果_Java_Android_Long Integer - Fatal编程技术网

JAva/Android-添加到long中没有效果

JAva/Android-添加到long中没有效果,java,android,long-integer,Java,Android,Long Integer,我通常使用python/php,但目前正在编写一个Android应用程序,因此目前正在使用java。 我不明白为什么我下面的代码不起作用 这意味着需要花费很长的时间来表示上次检查发生的时间(上次检查),并向其添加预定义的分钟数(检查间隔),当前设置为1分钟 Log.i(this.toString(), "Last check: " + Long.toString(last_check)); long add_to_check = CHECK_INTERVAL * 60 * 100

我通常使用python/php,但目前正在编写一个Android应用程序,因此目前正在使用java。 我不明白为什么我下面的代码不起作用

这意味着需要花费很长的时间来表示上次检查发生的时间(上次检查),并向其添加预定义的分钟数(检查间隔),当前设置为1分钟

    Log.i(this.toString(), "Last check: " + Long.toString(last_check));
    long add_to_check = CHECK_INTERVAL * 60 * 1000;
    long next = last_check + add_to_check;
    Log.i(this.toString(), "Add to check: " + Long.toString(add_to_check));
    Log.i(this.toString(), "Next check: " + Long.toString(next));
    scheduleNextRun(next);
我的期望是,第一个日志将显示上次检查的时间,第二个日志将显示60000,第三个日志将显示这两个日志的总和。 然而,我得到的第一个日志和第三个日志的值是相同的——好像我的加法根本不起作用,但我不知道为什么。 我想我可能在log vs int方面有问题,但我尝试将L添加到其中一个变量中,结果没有什么不同。 仅供参考,第二份日志显示预计为60000份

谢谢
亚伦

检查间隔
0?您写道“第二个日志显示为预期的60000”,但在第一次运行此代码时,
CHECK\u INTERVAL
可能为0,然后初始化,然后在以后的迭代中,当您查看日志的该部分时为1

您是否正在初始化
CHECK\u INTERVAL
为非零值,但在该代码运行之后?你有初始化错误吗

如果您在调试器中单步执行代码并查看结果,那么这个问题将很容易解决。如果您不使用调试器,请帮自己一个大忙,使用Android Studio(一个基于IntelliJ IDEA构建的优秀工具)或Eclipse+ADT(一个好工具)

Java初始化是以一种可预测、可移植和有用的方式定义的,但它仍然很棘手。例如,给定

class Foo {
  static final int A2 = A1 * 1000;
  static final int A1 = 60;
}
JVM首先将所有变量初始化为默认值,然后按顺序运行初始化表达式。由于A2的初始值设定项运行时A1为0,A2将以0结束

请参阅Java谜题,了解更微妙的情况,例如一个类的初始化代码引用第二个类,导致第二个类的初始化代码运行,然后第二个类的初始化代码引用第一个类中尚未初始化超过其默认值(0和null)的值。类在第一次请求时运行其初始化代码,但不能保证在使用这些值之前完成初始化

另一个棘手的情况是,当一个类C1引用第二个类C2.a的静态最终值时,您编辑了a的初始化代码,而没有重新编译类C1。Java对何时在第一个类的.class文件中缓存此类常量有精确的规则,但它们不是理想的规则,编译器也没有注意到需要为此重新编译C1

顺便说一句:如果
CHECK_INTERVAL
是一个
int
,表达式
CHECK_INTERVAL*60*1000
将计算一个
int
值,并在32位有符号范围内换行。尽管如此,
1*60*1000
仍然可以轻松地放入整数中

顺便说一句,Log.i()的第一个参数是一个标记。传入
this.toString()
[或简称
toString()
]是可以的,但其思想是传入一个常量标记,如当前类名,可用于日志筛选

[添加]Eclipse调试的快速介绍

在源代码编辑器中,双击左边距以设置断点。然后使用菜单或工具栏“调试为”Java应用程序,而不是“运行为”。Eclipse将进入其“调试透视图”(视图的排列)

查找带有分步图片(我查看了前3个;IBM最简洁,并介绍了更多功能)和视频的不错教程。它们很好,但很难导航


Android Studio中的日志更流畅。

请复制并粘贴日志输出;这段代码看起来是正确的。(注意,您不需要指定转换;编译器将为您插入转换。您可以说
“Last check:”+Last_check
)您是否在循环中声明变量?谢谢大家。我发现了问题:愚蠢。修复错误时,我正在查看以前的日志。感谢您的全面回复。事实证明,我的问题是看一个过时的日志太愚蠢了(从我第一次修正计算之前开始),但我很感激你的解释,因为我对Java.BTW知之甚少-我正在使用Eclipse+ADT,发现它真的很有帮助(有一些小怪癖,有点恼人)但是我不知道有一种能力可以单步进入代码并调试它。如何做到这一点?我在这个答案中添加了Eclipse调试的快速介绍。这不适合评论。非常感谢你的帮助!很乐意帮忙。一定要接受和/或投票支持答案,使其有助于调试此问题和相关问题。