虽然循环不增加java [关闭]

Posted

技术标签:

【中文标题】虽然循环不增加java [关闭]【英文标题】:While loop not incrementing java [closed] 【发布时间】:2022-01-09 14:36:23 【问题描述】:

我刚开始学习java。我的 while 循环似乎没有增加。这是我在 try and catch 中的 while 循环的 sn-p:

File file = new File("Reservation.txt");
Scanner sc = new Scanner(file);

    sc.useDelimiter(",");
try 
    while (sc.hasNext()) 
        i = 0;

        newRes[i] = readRec;

        fuN2 = sc.next();
        newRes[i].fullName = fuN2;
        readRec.setFirstName(fuN2);
        System.out.println("\n" + newRes[i].fullName);

        cn2 = sc.next();
        newRes[i].contact = cn2;
        readRec.setContact(cn2);
        System.out.println(newRes[i].contact);

        dt2 = sc.next();
        newRes[i].date = dt2;
        readRec.setDate(dt2);
        System.out.println(newRes[i].date);

        pa2 = sc.nextInt();
        newRes[i].pax = pa2;
        readRec.setPax(pa2);
        System.out.println(newRes[i].pax);

        bt2 = sc.next();
        newRes[i].bday = bt2;
        readRec.setBirthday(bt2);
        System.out.println(newRes[i].bday);

        ch2 = sc.nextInt();
        newRes[i].child = ch2;
        readRec.setChild(ch2);
        System.out.println(newRes[i].child);

        se2 = sc.nextInt();
        newRes[i].senior = se2;
        readRec.setSenior(se2);
        System.out.println(newRes[i].senior);

        pr2 = sc.nextInt();
        newRes[i].j = pr2;
        readRec.setPrice(pr2);
        System.out.println(newRes[i].j);

        dpr2 = sc.nextInt();
        newRes[i].k = dpr2;
        readRec.setDisPrice(dpr2);
        System.out.println(newRes[i].k);
        sc.next();
        sc.nextLine();
        i++;
    

 catch (NoSuchElementException e)

    sc.close();
    System.out.println("===============================");


每当我尝试打印出变量“i”时,它总是会打印出 0,但它总是会正确且按顺序读取文件。

更新:我从 while 循环中删除了 i 声明,答案应该在下面。

【问题讨论】:

如果您指的是 i 的值,那是因为您在 inside 循环中声明了它 请尝试将您的代码简化为重现问题的最小示例!另外,所有这些变量是什么:ifuN2newResreadReccn2dt2pa2bt2ch2,@987654332 @, dpr2?名称不会泄露任何东西,类型也不清楚(如果它们仅在循环中使用,您应该在使用它们的地方声明它们)。让您的问题更容易理解,您将有更好的机会得到答案! @JeroenSteenbeeke 不,鉴于这应该是 Java 代码,i 没有在那个 sn-p 中声明。 @Amadán 感谢您指出这一点。但确实发生的是,它在每次迭代开始时被设置为 0。 lol 我被一大堆神秘的缩写弄得不知所措,以至于我真的错过了这个。谈论:“干净的代码”...... :-) 【参考方案1】:

您在循环内部做的第一件事是将i设置为0 ...

所以i 在循环结束时递增,但在下一个循环中恢复。

但是在打印i 时,当您在循环执行后打印时,您应该始终得到 1,而不是 0。

试试这个:

var i = 0;
File file = new File( "Reservation.txt" );
Scanner sc = new Scanner( file );

sc.useDelimiter(",");
try 

  while (sc.hasNext()) 
  
    // i = 0; Get rid of this line!!!

    newRes [i] = readRec;

    fuN2 = sc.next();
    newRes [i].fullName = fuN2;

    …

    dpr2 = sc.nextInt();
    newRes [i].k = dpr2;
    readRec.setDisPrice( dpr2 );
    System.out.println( newRes [i].k );
    sc.next();
    sc.nextLine();
    ++i;
  
 
catch( NoSuchElementException e )

  sc.close();
  System.out.println("===============================");

【讨论】:

看来我已经修好了,谢谢:) 没有赞?没有“正确的解决方案”标记? ? var i = 0?你确定这是 Java 吗? @0009laH - Jepp,那是 Java!不确定它是什么时候引入的(我认为是 11 年),但在 Java 17 中,var 肯定是该语言的一部分。 @tquadrat 我觉得自己老了...

以上是关于虽然循环不增加java [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java声音类不循环[关闭]

在for循环中增加参数名称[关闭]

在 Java 中,流相对于循环的优势是啥? [关闭]

JAVA 增加for循环 foreach

Java包循环检测:如何找到涉及的具体类? [关闭]

Java跳过“While”循环[关闭]