0

現在、プログラムに問題があります。正しくループしません。サポートしてください。コードは以下のとおりです。前もって感謝します!

import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Wewe{
    public static void main(String[]args){
        Scanner inp = new Scanner(System.in);
        boolean tryAgain;
        do{
        System.out.print("\nInput username: ");
        String user = inp.nextLine();
        System.out.print("\nInput password: ");
        String pass = inp.nextLine();
    if(user.equals("admin") && pass.equals("admin")){
            System.out.print("Success!");
            tryAgain = true;
        }
        if(user!="admin" && pass!="admin"){
            JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
        tryAgain = false;
    }
}while(tryAgain = true);
        }
    }

私がしたいのは、ユーザーが間違ったユーザー名またはパスワードを入力すると、プログラムがループすることです。ただし、ユーザーが正しいユーザー名またはパスワードを入力した場合、ユーザーに正しいものを要求するループは発生しません。

4

13 に答える 13

4

このようにしてみてください:

public static void main(String[]args){
        Scanner inp = new Scanner(System.in);
        boolean tryAgain = true;
        do{
        System.out.print("\nInput username: ");
        String user = inp.nextLine();
        System.out.print("\nInput password: ");
        String pass = inp.nextLine();
    if(user.equals("admin") && pass.equals("admin")){
            System.out.print("Success!");
            tryAgain = false;
        }
        if(!user.equals("admin") || !(pass.equals("admin")){
            JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
        tryAgain = true;
    }
}while(tryAgain);
        }
    }
于 2013-02-21T09:57:48.443 に答える
3

変化する

if(user!="admin" && pass!="admin")if(user!="admin" || pass!="admin")

無効なユーザー名またはパスワードを確認したい場合

于 2013-02-21T09:57:06.177 に答える
2

while(tryAgain == true)=から==に変更

=値を割り当てるためのものです。

==状態確認用です。

を使用することもできます。

while(tryAgain)
于 2013-02-21T09:56:52.133 に答える
2

これはに割り当てtrueますtryAgain(これは常に として評価されtrue、無限ループが作成されます):

} while(tryAgain = true)

したがって、次のようになります。

} while(tryAgain == true)

しかし、適切なコーディング スタイルに従っていれば、問題全体を回避できたはずです。それは単純でなければなりません:

} while(tryAgain)

ブール変数をブール定数と比較しないでください。条件としてbooleanVarorを使用してください!booleanVar

于 2013-02-21T10:01:54.177 に答える
1

tryAgainループを中断するには、成功後に false に設定します。またelse if、無効なユーザーのチェックをスキップするために、ユーザーが正常にログインしたかどうかを確認するためのアフター チェックを利用します。Stringまた、他の人が言及しているように、オブジェクトの比較にはequalsメソッドを使用する必要があります。==最後に、while ループでは代入演算子ではなく比較演算子を使用する必要があります=

public static void main(String[] args) {
        Scanner inp = new Scanner(System.in);
        boolean tryAgain;
        do {
            System.out.print("\nInput username: ");
            String user = inp.nextLine();
            System.out.print("\nInput password: ");
            String pass = inp.nextLine();
            if (user.equals("admin") && pass.equals("admin")) {
                System.out.print("Success!");
                tryAgain = false;  //Changed to false to break loop
            }else if (!user.equals("admin") && !pass.equals("admin")) {
                            //^Using equals instead of ==, added else if
                JOptionPane.showMessageDialog(null,
                        "Try again! Invalid username or password!",
                        "Error Logging-In", JOptionPane.ERROR_MESSAGE);
                tryAgain = false;
            }
        } while (tryAgain == true); //using == instead of =
    }
于 2013-02-21T09:57:46.537 に答える
1

これを試して:

public class Wewe{
    public static void main(String[]args){
        Scanner inp = new Scanner(System.in);
        boolean tryAgain = true;
        do{
            System.out.print("\nInput username: ");
            String user = inp.nextLine();
            System.out.print("\nInput password: ");
            String pass = inp.nextLine();
            if(user.equals("admin") && pass.equals("admin")){
                System.out.print("Success!");
                tryAgain = false;
            }
            if(user!="admin" && pass!="admin"){
                JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
                tryAgain = true;
            }
        } while(tryAgain);
    }
}
于 2013-02-21T09:58:27.093 に答える
0
public static void main(String[] args) {
    Scanner inp = new Scanner(System.in);
    boolean tryAgain = false;

    do {
        System.out.print("\nInput username: ");
        String user = inp.nextLine();
        System.out.print("\nInput password: ");
        String pass = inp.nextLine();
        if (user.equals("admin") && pass.equals("admin")) {
            System.out.print("Success!");
            tryAgain = true;
            inp.close();
        } else {
            JOptionPane.showMessageDialog(null,
                    "Try again! Invalid username or password!",
                    "Error Logging-In", JOptionPane.ERROR_MESSAGE);
        }
    } while (tryAgain == false);
}
于 2013-02-21T10:12:03.250 に答える
0

あなたのコードにはいくつかの間違いがあります:

if(user!="admin" && pass!="admin"){ .... tryAgain = false;

次のようにする必要があります。

if(user!="admin" || pass!="admin"){ ....  tryAgain = true;

それで:

System.out.print("Success!");
            tryAgain = true;

次のようにする必要があります。

System.out.print("Success!");
            tryAgain = false;

そして最後に:

while(tryAgain = true);

次のようにする必要があります。

while(tryAgain == true);

あるいは単にwhile(tryAgain);

それが役立つことを願っています!

于 2013-02-21T10:00:32.467 に答える
0

==の代わりにequalsを使用し、

 Scanner inp = new Scanner(System.in);
        boolean tryAgain;
        do{
        System.out.print("\nInput username: ");
        String user = inp.nextLine();
        System.out.print("\nInput password: ");
        String pass = inp.nextLine();
    if(user.equals("admin") && pass.equals("admin")){
            System.out.print("Success!");
            tryAgain = true;
        }
        if( !"admin".equals(user) && !"admin".equals(pass)){
            JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
        tryAgain = false;
    }
}while(tryAgain = true);
于 2013-02-21T10:01:14.853 に答える
0

else と tryAgain をこのように間違って使用しないのはなぜですか

 if(user.equals("admin") && pass.equals("admin")){
            System.out.print("Success!");
            tryAgain = false; //why repeat again
        }
        else{
            JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
        tryAgain = true; //ask again
    }

それもあるだろう

while(tryAgain)
于 2013-02-21T10:03:14.403 に答える
0

以下の解決策を確認してください。

 public static void main(String[]args){
        Scanner inp = new Scanner(System.in);
        boolean tryAgain;
        do{
        System.out.print("\nInput username: ");
        String user = inp.nextLine();
        System.out.print("\nInput password: ");
        String pass = inp.nextLine();
    if(user.equals("admin") && pass.equals("admin")){
            System.out.print("Success!");
            tryAgain = true;
        }
        if(!user.equals("admin") || !pass.equals("admin")){
            JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
        tryAgain = false;
    }
}while(tryAgain);
        }
}

2 つの文字列オブジェクトを != で比較しています。それは間違いです。

あなたの投稿の問題行は次のとおりです: if(user!="admin" && pass!="admin"){

于 2013-02-21T10:04:54.723 に答える
0
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Wewe
{
    public static void main(String[]args)
    {
        Scanner inp = new Scanner(System.in);
        boolean tryAgain;
        do
        {
            System.out.print("\nInput username: ");
            String user = inp.nextLine();
            System.out.print("\nInput password: ");
            String pass = inp.nextLine();
            if(user.equals("admin") && pass.equals("admin"))
            {
                System.out.print("Success!");
                tryAgain = false;
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
                tryAgain = true;
            }
        } while(tryAgain == true);
    }
}

いくつかの変更が加えられました。

まず、あなたのコードは適切にインデントされています。

次に、if ステートメントを 2 つ持つ必要はありません。「ユーザーが正しい名前とパスワードを持っている場合は、これを実行します。ユーザーが正しい名前とパスワードを持っていない場合は、これを実行します」というように、if-else ステートメントを使用できます。これは、「ユーザーが正しい名前とパスワードを持っている場合はこれを行い、そうでない場合はこれを行う」と短縮できます。

第 3 に、tryAgain が true の場合、do-while ループが続行されるため、 の代わりにwhile(tryAgain = true)が必要ですwhile(tryAgain == true)。これは、2 つの等号が比較用であるのに対し、1 つの等号は比較用ではないためです。

第 4 に、tryAgain が true の間はループが継続するため、無効なユーザー名またはパスワードを入力した場合は tryAgain を true にしてループを続行し、正しいものを入力した場合は false にしてループを停止します。

また、 == を使用して文字列を比較しないでください。== は 2 つのオブジェクトが同じかどうかをチェックするため、ユーザーは決して == "admin" になりません。代わりに、equals() メソッドを使用して文字列を比較してください。

于 2013-02-21T10:07:33.027 に答える