我遇到了我编写的嵌套for循环问题。基本上我有一个JSON文件,我试图解析为单个变量,以便我可以将这些变量添加到数据库进行查询。
这是外圈和内圈:
for (int x = 0; x <= fixtures.length; x++) {
String testFixture = fixtures[x];
testFixture = testFixture.replace("\"", "");
testFixture = testFixture.replace("[", "");
testFixture = testFixture.replace("{", "");
testFixture = testFixture.replace("}", "");
String[] singleFixture = testFixture.split(",");
for (int i = 0; i <= singleFixture.length; i++) {
//System.out.println(singleFixture[i]);
String test = singleFixture[i];
String[] fix1 = test.split(":");
singleFixtureComplete.add(fix1[0]);
singleFixtureComplete.add(fix1[1]);
}
singleFixtureComplete.add(Arrays.toString(singleFixture));
}
这是一个夹具[0]的json数组,就是它......
fixtures.length = 381.所以我希望当内循环结束时,它将返回到外循环的顶部,x将增加+1。
正在发生的事情是内循环完成,就是这样。 x不会迭代到fixtures.length,即381次。
fixture中的每个索引都是一个包含34个密钥对的JSON数组。所以singleFixture.length = 34.这是有效的,我迭代了34次。然后循环结束,外部循环被忽略。
有没有人有任何想法我在这里做错了什么?
答案 0 :(得分:2)
loop
没有进入下一次迭代的原因是因为try-catch
子句正在捕获您的异常。查看主try-catch
块外的for-loop
。
//!!! The try is catching the exception for you. Remove it to see the real problem.
try {
URIBuilder builder = new URIBuilder("http://api.fantasydata.net/soccer/v2/json/Schedule/73");
...
for (int x = 0; x <= fixtures.length; x++) {
// Exception somewhere
}
}
catch(Exception e) {
}
问:强> 那么你需要做些什么才能使问题变得明显?
答强> 尝试;
try-catch
条款throws Exception
添加到main
方法;
public static void main(String[] args) throws Exception
这应该会留下一些堆栈跟踪以供进一步调查。
另外,正如其他人所说,你到达那里的循环逻辑是错误的。它应该<
小于而不是 <=
,后者肯定会触发index out of bound
例外。
<强>理论值:强>
只是一个观察 - 我认为嵌套循环是触发出界异常的索引,因此问题?作为第一步,我将首先修复两个循环逻辑。
如果您仍然遇到问题,并希望我们查看堆栈跟踪,请发布另一个问题,我们可以进一步了解。
很高兴能提供帮助。