【问题标题】:why does if statement send continue to wrong while loop为什么if语句发送继续错误的while循环
【发布时间】:2018-06-06 19:03:03
【问题描述】:

我的程序不断跳回到我的第二个嵌套 while 循环,我想做的是继续我的第三个嵌套 while 循环。我已经尝试自行继续,继续使用标签“她”,如下所示,也尝试过不使用 continue 语句。每次程序跳转到第二个while循环。

while((line = x.readLine()) != null){
            tekst = line.split("\\s+");
            if(tekst[0].equals(".PUNKT")||tekst[0].equals(".KURVE")
                    ||tekst[0].equals(".FLATE")){
                atrib = new String[100];
                a = 0;
                while(line != null){
                    if(line.equals("..NØH ")){
                        int []N = new int[10000];
                        int []Ø = new int[10000];
                        int []H = new int[10000];
                        line = x.readLine();
                        koord = line.split("\\s+");
                        i = 0;
                        her:while(isInteger(koord[0])){
                            System.out.println(koord[2]);
                            N[i] = Integer.parseInt(koord[0]);
                            Ø[i] = Integer.parseInt(koord[1]);
                            H[i] = Integer.parseInt(koord[2]);
                            i++;
                            line = x.readLine();
                            koord = line.split("\\s+");
                            if (koord[0].equals("..NØH ")){
                                line = x.readLine();
                                koord = line.split("\\s+");
                                continue her;
                            }
                            if(koord[0].equals(".PUNKT")||koord[0].equals(".KURVE")
                                    ||koord[0].equals(".FLATE")){
                                midl = line;
                                break;
                            }
                        }

【问题讨论】:

  • 你试过debugging吗?
  • 鉴于line.PUNKT.KURVE.FLATE 开头,它如何等于"..NØH "
  • 这段代码可能有很多问题。从以下开始:很可能您不应该在该 while 循环的 inside 中创建这 3 个辅助数组。并且请:使用符合 Java 命名约定的有意义的名称。 N 和 H 是可怕的名字。
  • 除此之外:您真正的问题是您编写的代码过于复杂。避免这样的嵌套循环。尤其要避免标记中断/继续。

标签: java while-loop


【解决方案1】:

我认为它正在返回第三个循环,因为“继续”是要这样做的,但条件 isInteger(koord[0]) 肯定会是假的,因为如果koord[0].equals("..NØH ") 是真的那么koord[0] 不是数字,对吧?

【讨论】:

  • 程序正在读取 tekst 文件。根据格式化规则,“..NØH”表示下一行将包含三个坐标。格式是挪威语,因此 NØH 代表北、东和高度。
  • 不知道这种文件格式,谢谢提供信息。
【解决方案2】:

if 语句仅在

时执行
if(tekst[0].equals(".PUNKT")||tekst[0].equals(".KURVE")
                ||tekst[0].equals(".FLATE"))

那你怎么用语句

line.equals("..NØH ")

我认为这个程序会卡在while循环中

while(line != null)

【讨论】:

    【解决方案3】:

    看看这三行:

    line = x.readLine();
    koord = line.split("\\s+");
    if (koord[0].equals("..NØH ")){
    

    条件koord[0].equals("..NØH ") 永远不会为真。

    • 如果行包含“..NØH”,那么koord[0] 将是“..NØH”(没有尾随空格!)
    • 如果行包含其他内容,则 koord[0] 将有所不同

    最里面的while循环的下一个if条件也不满足,所以跳过了break语句。

    下一个测试是最里面的while循环的条件:

    while(isInteger(koord[0]))
    

    由于line 是“..NØH”,koord[0] 不是整数,因此终止循环。

    这会将您带回到中间 while 循环的开头。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2015-05-19
      • 1970-01-01
      • 2016-10-07
      • 2015-08-03
      相关资源
      最近更新 更多