【问题标题】:Nested for loop not returning to outer loop嵌套for循环不返回外循环
【发布时间】:2016-07-14 12:35:29
【问题描述】:

我编写的嵌套 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));
}

它的输出是fixtures[0]处的一个json数组,就是这样......

fixtures.length = 381。所以我希望当内循环完成时,它将返回到外循环的顶部,并且 x 将增加 +1。

正在发生的事情是内部循环完成,仅此而已。 x 不会迭代到 fixtures.length 即 381 次。

fixtures 中的每个索引都是一个包含 34 个键对的 JSON 数组。所以 singleFixture.length = 34。这行得通,我迭代了 34 次。然后循环结束,外部循环被忽略。

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 您将收到一个ArrayIndexOutOfBoundsException。使用i &lt; singleFixture.length 而不是i &lt;= singleFixture.length。或者,更简单的是for (String[] test : singleFixture) {,因为否则你永远不会真正使用i
  • 旁注:您可能想了解单层抽象原则。如果您避免将这么多代码放在一个地方,您将不会相信代码会变得多么容易阅读。
  • 使用调试器逐步执行,您将能够亲眼看到。
  • 就像旁注一样。您可以为 Java 使用JSON library,更高的抽象级别使得处理此类复杂数据变得更加容易。这是一个比较其中一些的链接:blog.takipi.com/…
  • @angryip 当然,但它是 18000 行 json 文件:/

标签: java json for-loop


【解决方案1】:

您的loop 没有进入下一次迭代的原因是try-catch 子句正在捕获您的异常。查看位于主 for-loop 块之外的 try-catch

 //!!! 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) {

  }

问: 那么你必须做什么才能使问题变得明显?

答: 试试看;

  1. 注释掉try-catch 子句
  2. throws Exception 添加到main 方法中; public static void main(String[] args) throws Exception

这应该会给您留下一些堆栈跟踪以供进一步调查。

另外,正如其他人所提到的,你得到的循环逻辑是错误的。应该是&lt;小于not&lt;=,后者肯定会触发index out of bound异常。

理论:

只是一个观察 - 我认为嵌套循环正在触发出界异常的索引,因此问题?作为第一步,我会先修复两个循环逻辑。

好吧,如果您仍然遇到问题并且希望我们查看堆栈跟踪,请发布另一个问题,我们可以进一步处理。

很高兴为您提供帮助。

【讨论】:

  • 谢谢 Samuel,我会听从您的建议,并希望自己解决问题。感谢大家的帮助和建议。
  • 不用担心。很可能嵌套的for-loop 触发了index-out-of-bound 异常,导致整个循环结束。所以我建议先修复循环条件,&lt;。不是&lt;=
  • @angryip 谢谢你们...我修好了。该错误是由 json 文件中的胭脂字符引起的。它现在正在工作。我感谢你所有的帮助。我欠你们俩一杯啤酒!
  • @StevenBranigan 太棒了!我会把那瓶啤酒的地址发给你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多