【问题标题】:This do/while loop repeat for no reason, how to fix it?这个do/while循环无缘无故重复,如何解决?
【发布时间】:2019-08-06 17:08:37
【问题描述】:

我正在尝试做一个虚假的信用卡生成器。所以基本上问题是,当用户说“不”时,程序会继续并显示“再见”,但它会重新开始,找不到原因。

我想把所有这些 do/while 循环放在一个 for 循环中,这样我就可以在最后放一个 break,但它导致了一个死代码(这是合乎逻辑的)。

public void generateCode() {
    char userAnswer;
    Scanner sc = new Scanner(System.in);

    do {
        System.out.println("Put a bin.");            
        String binGiven = sc.nextLine();

        verificationBin(); 
        showCardNumber();

        do {

            System.out.println("Do u wanna try again ? (Yes/No)");
            userAnswer = sc.nextLine().charAt(0);

        } while (userAnswer != 'Y' && userAnswer != 'N');

    } while (userAnswer == 'Y');

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

}

我希望当用户说不时它会停止,但它会重新开始

【问题讨论】:

  • 他的意思是这个缺陷可能不在 generateCode 方法上,而是在它被调用的方式上。
  • 如果方法到达打印“再见”的位置,那么问题就出在其他地方,要么在直接调用者中,要么在调用堆栈的更下方。
  • 顺便说一句,在原始代码中,如果您输入“N”,它确实会正确终止。但是,如果您输入“n”、“no”、“No”或其他类似的变体,则它不起作用。
  • 您介意添加用于调用“generator.generateCode();”的其余代码吗? ?它可以帮助故障排除。由于您是编程新手,因此调试是您的朋友:)
  • 问题不在于您错误地调用了该方法。那是您反复调用它。

标签: java loops error-handling while-loop do-while


【解决方案1】:

根据您添加的图像,您正在调用循环代码两次。一次来自您的构造函数,一次来自您的main

这是您当前的代码:

Generator gen = new Generator();
gen.generateCode();

但是,您的构造函数generator 类中包含对相同 方法generateCode() 的调用,如下所示:

this.generateCode();

当您使用new Generator() 时,它也会运行构造函数内部的代码,因此您将运行相同的代码两次。您可以通过尝试运行该程序两次来确认这一点,并且它应该在第二次之后停止执行。

删除this.generateCode(),因为这不是真正应该从构造函数运行的代码。

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多