私はコンピュータ サイエンス コースに登録している高校生です。最近、次のプロジェクトが割り当てられました。
「コンビネーション ロック クラスを実装します。コンビネーション ロックには、A ..... Z とラベル付けされた 26 の位置を持つダイヤルがあります。ダイヤルは 3 回設定する必要があります。正しい組み合わせに設定すると、ロックを開くことができます。ロックがユーザーがダイヤルを 3 回以上設定すると、最後の 3 つの設定によって、ロックを開くことができるかどうかが決まります。この演習の重要な部分は、CombinationLock クラスに適切なインターフェイスを実装することです。
ロックが閉じている場合にコンビネーションを再び開くことができる部分に問題があることを除いて、すべてが完了し、正しく実行されています。ループについてはまだ学んでいませんが、先生がループについて一度言及したことを覚えており、ループを使用することで問題が解決する可能性があると考えました。私は本を先読みし、答えの一部としてループを使用しようとしました。しかし、私は無限ループになってしまったと思います。問題を解決する方法がわかりません。ループを使用する以外に、これを行う方法はありますか?
私のテスタークラスは次のとおりです。
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;
}
}