我有一个非常奇怪的问题,在尝试在eclipse上开发android时
我的程序总是返回无意义的语句,所以我尝试了调试它。
现在我明白了问题是什么...... ......代码实际上是疯狂的 - 这绝对是不合逻辑的
这是我的代码:
ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);
if (formatedVerses.size() < 1) { // check if readAndSplitDatabaseFile worked
createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again
}
return formatedVerses;
基本上我创建了这个ArrayList
但是当我调试时,它不会从上到下通过代码,它会产生奇怪的不合逻辑的跳跃
调试器到达行:
ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);
然后跳转到if语句(到目前为止很好)
if (formatedVerses.size() < 1) {
但是“formatedVerses.size()&lt; 1”为false,所以它应跳过if-block
但是调试器不仅会跳转到if块中,而且会跳转到块的第二行:
formatedVerses = readAndSplitDatabaseFile(database, books);
这没有任何意义。
我觉得有人在跟我开玩笑。
我无法绕过这个......
我也尝试重组代码...... 但它只会变得怪异。
我也尝试了其他实现。例如:
if (formatedVerses.size() < 1) {
return array1;
} else{
doSomethingElse();
return array2;
}
在这种情况下,它会跳转到if-block的真实陈述
return array1;
然后,当我点击下一步时,它实际上是从那一行跳转到
在else块内部return array2
行,同时完全省略doSomethingElse()
- 行
有人有任何想法吗? 因为我现在疯了......
答案 0 :(得分:0)
通常当我看到这样的行为时,是因为我没有运行我认为正在运行的代码。我还没有完成Android开发,所以我不能专门讲这个,但是你在项目菜单下检查了“自动构建”吗?我发现要减少我极大地看到这种行为的次数。
您是否尝试过清理代码并进行完全重建?您是在Eclipse之外还是在远程设备上运行它?如果在远程设备上,您是否已将代码发布到设备?
正如我所说,我没有进行任何Android开发,因此从Andriod开发的角度来看,其中一些问题似乎很明显。
希望这些想法有所帮助。
答案 1 :(得分:0)
对我而言,实际上听起来你的牙套在某种程度上是不对齐的。它似乎忽略了if语句的括号,将其视为这样。
if (formatedVerses.size() < 1) // check if readAndSplitDatabaseFile worked
createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again
虽然没有真正解释你的第二个例子。
编辑:或许你的第二个块也在解析奇怪的问题..但不解释为什么代码在返回语句之后继续。
if (formatedVerses.size() < 1)
return array1;
else
doSomethingElse();
return array2;
答案 2 :(得分:0)
只是详细说明aperkins所说的,这是正确的,Eclipse调试器使用从代码编译成.class文件时的行号信息,并使用源.java文件显示正在代码的代码行跑。所以说你写这个:
if (readAndSplitDatabaseFile(database, books).size() < 1) {
createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again
}
return formatedVerses;
然后构建并运行,然后添加一行代码和一个空行:
ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);
if (formatedVerses.size() < 1) { // check if readAndSplitDatabaseFile worked
createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again
}
return formatedVerses;
现在当你在调试时,你正在逐步完成第一个例子,但是看第二个例子。提到的aperkins解决方案只是构建并再次运行,或者撤消您的更改,直到它们与您上次编译时的内容相匹配。
答案 3 :(得分:0)
好的,我明白了。
奇怪的是,完全不同。
我在程序的另一面犯了一些错误。它与此代码段无关(问题甚至不在同一个类中。)
一旦修复,它就会再次恢复正常。
我不明白,在这一点上,我不想理解它。
感谢所有人的帮助。