0

私はコンピュータープログラミングに非常に慣れていないため、ユーザーの入力から最後の3文字を読み取り、仮想金庫のロックを解除するための正しいコードであるかどうかを確認するプログラムを作成しようとしています. ユーザーが終了するはずの「1」を入力すると、プログラムを閉じることができないようです。静的コンテキストで非静的変数「ロック」を参照することにも問題がありますが、これを回避する方法はありますか? 助けてくれてありがとう。

/**
 * Gets the last three lettersof the user's input.
 * 
 * @author (Sean F.) 
 * @version (1.0)
 */
import java.util.Scanner;
public class ComboInput
{
public  static void main(String[] args)
{
    System.out.println("\f");
    Scanner in = new Scanner(System.in);
    System.out.print("Enter a letter");
    System.out.print("\n");
    String input = "";
    int comboLength = 0;
    input = in.nextLine();
    input = input.substring(0,1);
    comboLength ++;
    Lock q = new Lock();
    int lock = q.getLockStatus(input);
    String close = "1";
    while (comboLength < 3){
        System.out.println("\f");
        System.out.print("Your letters being used are:");
        System.out.print("\n");
        System.out.println(input);
        System.out.print("Enter another letter or type \"1\" to exit");
        System.out.print("\n");
        String newInput = in.nextLine();
        newInput = newInput.substring(0,1);
        input = input+newInput;
        comboLength++;
    }
    while (input.length()>=3){
        while((input.substring(2)).equals(close)){           
            System.out.println("\f");
            System.out.println("You gave up, lock is still locked");
            System.exit(0);
        }
        while(!((input.substring(2)).equals(close))){
            while (lock == 0){
                while (comboLength >= 3){
                    System.out.println("\f");
                    System.out.print("Your letters being used are:");
                    System.out.print("\n");
                    System.out.println(input.substring(comboLength-3));
                    System.out.print("Enter another letter or type \"1\" to exit");
                    System.out.print("\n");
                    String newInput = in.nextLine();
                    newInput = newInput.substring(0,1);
                    input = input+newInput;
                    comboLength++;
                    int lock2 = q.getLockStatus(input);
                    lock = lock2;
                }  
            }
            while (lock == 1){
                System.out.println("\f");
                System.out.println("Your Combination is Correct. Unlocked");
                System.exit(0);
            }
        }
    }
}

}

これはプログラムの第 2 部です。Lockというクラスです

/**
 * Gives the current status of the lock
 */
public class Lock
{
private String code;
/**
 * Constructs the correct code for the lock
 */
public Lock()
{
    code = "smf";
}

/**
 * 
 * 
 * @return     An integer to describe whether lock is open or not
 */
public int getLockStatus(String c)
{
        if (c.equalsIgnoreCase(code)){
            return 1;
        }
        else{
            return 0;
        }       
}
4

1 に答える 1

0

プロンプトにそのように表示されていても、ユーザーが 1 を入力した場合に終了するコードは表示されません。newInput = newInput.substring(0,1);の後に次のコードを追加することで修正できます。

if (newInput.equals(close))
    System.exit(0);

ちなみに、そのコードには約 20 の異なるバグが含まれています。私はあなたの手間を省き、あなたのためにコードを書きます:

import java.util.Scanner;

public class ComboInput {
    Scanner in = new Scanner(System.in);
    System.out.print("Please enter the combination, or 1 to exit: ");
    String combo = in.readLine();
    if (combo.equals("1"))
        System.exit(0);
    if (combo.equals("smf")) 
        System.out.println("That is the correct combination. The safe is open.");
    else 
        System.out.println("Incorrect combination.");
}

このコードを調べて、どのように機能するかを調べ、簡単なコードを書くためのレッスンと考えてください。

Lockクラスが使用されると主張する場合は、変更する必要があるのは 1 行だけです。あなたがそれを理解できるかどうか見てください。

于 2013-11-03T22:02:08.983 に答える