gpt4 book ai didi

java - 询问用户输入后无限循环

转载 作者:行者123 更新时间:2023-12-01 04:12:52 25 4
gpt4 key购买 nike

我是一名就读计算机科学类(class)的高中生。我们最近被分配了这个项目:

“实现一个密码锁类。密码锁有一个转盘,有 26 个位置,标记为 A.....Z。转盘需要设置 3 次。如果设置正确的密码,锁可以可以打开。当锁再次关闭时,可以再次输入密码。如果用户设置拨号盘超过 3 次,则最后 3 次设置将决定锁是否可以打开。此练习的一个重要部分是实现适当的操作CombinationLock 类的接口(interface)。”

我已完成所有操作并正常运行,但我遇到了如果锁关闭则可以再次打开组合的部分的问题。我们还没有学习循环,但我记得我的老师曾经提到过它们,我认为使用循环可以解决我的问题。我向前看了书,并尝试使用循环作为我答案的一部分。但是,我认为我最终陷入了无限循环,并且我不知道如何解决该问题。除了使用循环之外,还有其他方法可以做到这一点吗?

我的测试器类如下:

public class CombinationLockTester

{

public static void main(String [] args)

{
System.out.println("*All other questions are answered with Yes or No.");
Scanner kin = new Scanner(System.in);
System.out.print("Enter what you want the combination to be. (All uppercase, with no space seperation) : ");
String userCode = kin.next();

CombinationLock userCombination = new CombinationLock(userCode);

System.out.print("Try to open the lock? : " );
String tryToOpenLockYesNo = kin.next();

if (tryToOpenLockYesNo.equals("Yes"))
{

System.out.print("Enter the lock Combination : " );
String userCombinationLockGuess = kin.next();

userCombination.openLock(userCombinationLockGuess);
if (userCombinationLockGuess.equals(userCode))
{

System.out.print("Correct Combination! Open the Lock? : ");
String openLockYesNo = kin.next();

if (openLockYesNo.equals("Yes"))
{
userCombination.unlock();

System.out.print("The lock is open and you have reaped the rewards of its contents. Will you now close the lock? : ");
String closeLockYesNo = kin.next();

if (closeLockYesNo.equals("Yes"))
{
userCombination.lock();
;
System.out.print("The lock is now closed again. Will you check again to see if you closed it? : ");
String checkLockYesNo = kin.next();

if (checkLockYesNo.equals("Yes"))
{
System.out.println("The lock is locked: " + userCombination.isItClosed());

System.out.print("Re-enter the combination? : " );
String restartYesNo = kin.next();

if (restartYesNo.equals("Yes"))
{
do
{
if (tryToOpenLockYesNo.equals("Yes"))
{

System.out.print("Enter the lock Combination : " );
String userCombinationLockGuess2 = kin.next();

userCombination.openLock(userCombinationLockGuess2);
if (userCombinationLockGuess2.equals(userCode))
{

System.out.print("Correct Combination! Open the Lock? : ");
String openLockYesNo2 = kin.next();

if (openLockYesNo2.equals("Yes"))
{
userCombination.unlock();

System.out.print("The lock is open and you have reaped the rewards of its contents. Will you now close the lock? : ");
String closeLockYesNo2 = kin.next();

if (closeLockYesNo.equals("Yes"))
{
userCombination.lock();

System.out.print("The lock is now closed again. Will you check again to see if you closed it? : ");
String checkLockYesNo2 = kin.next();

if (checkLockYesNo.equals("Yes"))
{
System.out.println("The lock is locked: " + userCombination.isItClosed());

System.out.print("Re-enter the combination? : " );
String restartYesNo2 = kin.next();

if (restartYesNo.equals("Yes"))
{
System.out.println("");
}
else
{
System.out.println("Goodbye." );
}
}
else
{
System.out.println("You did not check to see if the lock is open." );
}
}
else
{
System.out.print("You have left the lock open and unlocked.");
}
}
else
{
System.out.println("The lock is unlocked, but you chose not to open it. Are you afraid to face what's inside?");
}
}
else
{
System.out.println("Incorrect combination!");
}
}
else
{
System.out.println("The secret of the combination lock will always remain a mystery to you...");
}
}

while (userCombination.isItClosed() == true);
}
else
{
System.out.println("Goodbye." );
}
}
else
{
System.out.println("You did not check to see if the lock is open." );
}
}
else
{
System.out.print("You have left the lock open and unlocked.");
}
}
else
{
System.out.println("The lock is unlocked, but you chose not to open it. Are you afraid to face what's inside?");
}
}
else
{
System.out.println("Incorrect combination!");
}
}
else
{
System.out.println("The secret of the combination lock will always remain a mystery to you...");
}

}

类本身是:

public class CombinationLock
{

private String code;
private String userGuess;
private boolean isLockClosed;

public CombinationLock(String pCode)
{
code = pCode;
isLockClosed = true;
}

public void openLock(String pUserGuess)
{
userGuess = pUserGuess;

if (userGuess.length() > 3)
{
userGuess = userGuess.substring(userGuess.length() - 3, userGuess.length());
}
else
{
userGuess = userGuess;
}

}


public void unlock()
{
if (userGuess.equals(code))
isLockClosed = false;
}

public void lock()
{
isLockClosed = true;
userGuess = "";
}

public boolean isItClosed()
{
return isLockClosed;
}
}

最佳答案

你的程序的布局非常清晰,但是在运行它时,如果用户输入组合,然后猜测哪个是错误的,程序就会停止。应该有一个比您拥有的循环更高的 do while 循环,以便在描述的事件中,系统会询问用户是否要进行另一次猜测。

程序应该什么时候结束?当他们做出 3 次错误的猜测或当用户说他们希望结束或两者兼而有之时?需要回答这些问题,并在必要时对程序进行相应修改。不过看起来不错。到目前为止,您应该能够让它发挥作用。

此外,请记住您可以使用

break;  

如果需要的话可以跳出循环。

完成后,您还应该关闭扫描程序,如下所示:

kin.close();

对 CombinationLockTester 类进行以下一些修改即可产生所需的结果:

import java.util.Scanner;

public class CombinationLockTester

{

public static void main(String [] args)

{
System.out.println("*All other questions are answered with Yes or No.");
Scanner kin = new Scanner(System.in);
System.out.print("Enter what you want the combination to be. (All uppercase, with no space seperation) : ");
String userCode = kin.next();

CombinationLock userCombination = new CombinationLock(userCode);

do
{

System.out.print("Try to open the lock? : " );
String tryToOpenLockYesNo = kin.next();

if (tryToOpenLockYesNo.equals("Yes"))
{

System.out.print("Enter the lock Combination : " );
String userCombinationLockGuess = kin.next();

userCombination.openLock(userCombinationLockGuess);
if (userCombinationLockGuess.equals(userCode))
{

System.out.print("Correct Combination! Open the Lock? : ");
String openLockYesNo = kin.next();

if (openLockYesNo.equals("Yes"))
{
userCombination.unlock();

System.out.print("The lock is open and you have reaped the rewards of its contents. Will you now close the lock? : ");
String closeLockYesNo = kin.next();

if (closeLockYesNo.equals("Yes"))
{
userCombination.lock();
;
System.out.print("The lock is now closed again. Will you check again to see if you closed it? : ");
String checkLockYesNo = kin.next();

if (checkLockYesNo.equals("Yes"))
{
System.out.println("The lock is locked: " + userCombination.isItClosed());

System.out.print("Re-enter the combination? : " );
String restartYesNo = kin.next();

if (restartYesNo.equals("Yes"))
{

if (tryToOpenLockYesNo.equals("Yes"))
{

System.out.print("Enter the lock Combination : " );
String userCombinationLockGuess2 = kin.next();

userCombination.openLock(userCombinationLockGuess2);
if (userCombinationLockGuess2.equals(userCode))
{

System.out.print("Correct Combination! Open the Lock? : ");
String openLockYesNo2 = kin.next();

if (openLockYesNo2.equals("Yes"))
{
userCombination.unlock();

System.out.print("The lock is open and you have reaped the rewards of its contents. Will you now close the lock? : ");
String closeLockYesNo2 = kin.next();

if (closeLockYesNo.equals("Yes"))
{
userCombination.lock();

System.out.print("The lock is now closed again. Will you check again to see if you closed it? : ");
String checkLockYesNo2 = kin.next();

if (checkLockYesNo.equals("Yes"))
{
System.out.println("The lock is locked: " + userCombination.isItClosed());

System.out.print("Re-enter the combination? : " );
String restartYesNo2 = kin.next();

if (restartYesNo.equals("Yes"))
{
System.out.println("");
}
else
{
System.out.println("Goodbye." );
break;
}
}
else
{
System.out.println("You did not check to see if the lock is open." );
}
}
else
{
System.out.print("You have left the lock open and unlocked.");
}
}
else
{
System.out.println("The lock is unlocked, but you chose not to open it. Are you afraid to face what's inside?");
}
}
else
{
System.out.println("Incorrect combination!");
}
}
else
{
System.out.println("The secret of the combination lock will always remain a mystery to you...");
break;
}

}
else
{
System.out.println("Goodbye." );
break;
}
}
else
{
System.out.println("You did not check to see if the lock is open." );
}
}
else
{
System.out.print("You have left the lock open and unlocked.");
}
}
else
{
System.out.println("The lock is unlocked, but you chose not to open it. Are you afraid to face what's inside?");
}
}
else
{
System.out.println("Incorrect combination!");
}
}

else
{
System.out.println("The secret of the combination lock will always remain a mystery to you...");
break;
}

}

while (userCombination.isItClosed() == true);

kin.close();

}

}

唯一需要的其他改进是通过添加一个 int 计数器来防止用户在连续 3 次出错时再次打开锁,该计数器每次出错时都会递增 (count++) 和然后在

行的正确位置添加另一个 if 语句
if(count==3) 
{

print "no more tries allowed"
break;

}

else

{

//do nothing

}

else 部分实际上并不需要,因为其中没有执行任何操作。

关于java - 询问用户输入后无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19747467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com