0

ユーザーがパスワードを入力してディレクトリシステムを使用する簡単なプログラムを作成しています。

ユーザーが詳細を入力しないことを選択した場合は、ログアウトしてから、再度ログインするオプションを提供します。これをループで実行しようとしましたが (以下のコードを参照)、passQ vairable を 0 にリセットすると、ユーザーがログアウトしてループ内の最初のステートメントに戻ることを期待していましたが、そうはなりません。

誰でも私を正しい方向に向けることができますか?

ブレークを追加してみました。(以下のコメントアウト)しかし、これでプログラムは終了しました。

ps パスワードを管理するこの方法は実際には安全ではないことを知っています。将来、このようなループを他のことに使用したいかもしれないので、ただ遊んでいました。

package directory;

import java.util.ArrayList;
import java.util.Scanner;

public class Directory {

/**
 * @param args the command line arguments
 */
//-------------//
//Main Meathod //
//-------------//
public static void main (String[] args)
{
    //------------------//
    // Define Variables //
    //------------------//
    String question = "Y";
    String passQ    = "0";
    String password = "password";

    Scanner passCheck = new Scanner(System.in);
    System.out.println("Welcome to Chris Headleands Tel Directory, Enter Password to access sytems"); //1 and 0 used for yes and no
    question = passCheck.nextLine(); // Next line used to decide if the user wants to enter a persons details
    while (passQ != password)
    {
        if (question.equalsIgnoreCase("password")) //Do they want to ender a person? 1 == yes
        {

            //Create a new array list for the people created
            ArrayList<TelEntry> directory = new ArrayList<TelEntry>();

            //Check if the user wants to create a new person
            Scanner checker = new Scanner(System.in);
            System.out.println("would you like to add a directory entry(1 = Yes / 0 = NO!)"); //1 and 0 used for yes and no
            question = checker.nextLine(); // Next line used to decide if the user wants to enter a persons details

            if (question.equalsIgnoreCase("y")) //Do they want to ender a person? 1 == yes
            {
                while (question.equalsIgnoreCase("y")) // Add a loop so multiple people can be added
                {

                    String name; // First name
                    String telNo; // Last name

                    // Create scanner for entering details
                    Scanner keybd = new Scanner(System.in);

                    //----------------------------------//
                    //User to enter details via keyboard//
                    //----------------------------------//

                    // Ask user to set first name
                    System.out.println("Enter their first name");
                    name = keybd.nextLine();

                    // Ask user to set last name
                    System.out.println("Enter their last name");
                    telNo = keybd.nextLine();

                    // -------------------------------------//
                    //Add the new person to personlist array//
                    //--------------------------------------//
                    directory.add(new TelEntry(name, telNo));

                    //-----------------------------------------------------------------------------//
                    // Check to see if the user wants to add another person, if Y then re-run loop //
                    //-----------------------------------------------------------------------------//
                    Scanner newChecker = new Scanner(System.in);
                    System.out.print("would you like to enter another person? (1 = Yes / 0 = NO!)");
                    question = newChecker.nextLine();  

                }


            }

            //--------------------------------------------------------------//
            // User doesnt want to add any people to the persontest program //
            //--------------------------------------------------------------//
            if (question.equalsIgnoreCase("testmode"))
            {
                System.out.println("you are now in test mode")
            }
            else
            { // Provide the user with a witty retort                     
                System.out.println("if your not going to use me for what I was designed to do, bugger off and bother someone else!");
                System.out.println("Logging out");
                passQ = "0"; // Reset password loop
                // break;
            }
        }
    }
}

}

4

3 に答える 3

3

これは常に次のようになりますtrue

while (passQ != password)

aspassQとは同じインスタンスpasswordを参照しません。2 つのインスタンスの内容を比較するためにString使用します。ただし、次の場合でも、またはが異なる値に設定されているコードのどこにも表示されません。.equals()StringpassQpassword

while (!passQ.equals(password))

これはまだ使用されていtrueました。

于 2012-10-27T11:49:30.270 に答える
2

while 条件を変更する必要があります

   while (!passQ.equals(password))

または、以下に置き換えて、while ループの上にコードを投稿してください。

  if (passCheck.hasNextInt()) { //check whether user has entered numeric value
        if (passCheck.nextInt() == 0) { //if 0 close the program 
            return;
        }
    }
于 2012-10-27T11:49:03.763 に答える
0

文字列を比較するには、while (!passQ.equals(password)) 常にメソッドを使用します。equals()

于 2012-10-27T11:51:01.110 に答える