2016-04-01 4 views
0

私はjavaを初めて使用しているため、いくつかの構文上の問題について助けが必要です。基本的に私が持っているのは、ユーザーにパスワードの入力を求めるプロンプトです。パスワードを入力すると、入力された文字列パスワードが表示され、パスワードが保存されます。私が助けが必要なのは、ユーザーが文字列を入力せずに入力ボタンを押すだけで、元のプロンプトが表示されるようにすることです。私はそれがパスワードが入力されるまでループを維持したい。以下は私のオリジナルコードで、forループを使って試したものです。助けが必要です。元のステートメントへのJavaのループ

String prompt = "Enter password "; 
    String pw = passwordProvider.getPassword(prompt); 


    if (pw != null && pw.length() > 0) 
    { 
     passwordProvider.status("Password Updated"); 

     } else { 

     System.out.println("here is where I want my original prompt to appear again"); 
    } 

return DRPwCrypt.encryptAES(pw); 

コードループ

 String prompt = "Enter password "; 
    String pw = passwordProvider.getPassword(prompt); 

    if (pw != null && pw.length() > 0) 
    { 
     passwordProvider.status("Password Updated"); 
    } else { 

     System.out.println("here is where I want my original prompt to appear again"); 
    } 

CODE WITH FOR LOOP 

for (
    String prompt = "Entry " + propertyName + " found in config " + configName + 
        "\nEnter new password : ";) { 
String pw = passwordProvider.getPassword(prompt); 


if (pw != null && pw.length() > 0) 
{ 
    passwordProvider.status("Updating password"); 
} else { 
    System.out.println("etsting"); 
} 

return DRPwCrypt.encryptAES(pw); 

}のために

+0

おそらく、あなたは 'while'ループを考慮する必要があります。 'while(pw == null && pw.isEmpty){}' – Patrick

+0

whileループでは、if-elseが必要です。これは可能です –

+0

whileループに条件文をネストできます。しかし、とにかくパスワードが入力されるとwhileループが終了します。そして、プログラムはループの後のステートメントで続行されます。 – Patrick

答えて

0

また

この試してみてくださいJavaのConsoleクラスを使用して試すことができます:

public static void main(String[] args) { 

    Console console = System.console(); 
    if(console == null){ 
     System.out.println("ERROR: Couldn't get Console"); 
     return; 
    } 
    boolean passwordUpdated = false; 
    while (!passwordUpdated) { 

     System.out.print("Enter password :"); 
     String password = console.readLine(); 
     // char[] password = console.readPassword() // can be used 

     if (password != null && password.length() > 0) { 
      System.out.println("Password Updated"); 
      passwordUpdated = true; 
     } else { 
      System.out.println("WARN: Invalid password, please try again"); 
     } 
    } 
} 

注:あなたが持っていますプログラムを実行するには、端末/コマンドプロンプトを使用します。システムreturns nullコンソールオブジェクト。

+0

入力パスワードはプロンプトであるため、入力パスワードの印刷行はありません。そして私は保存されるパスワードを入力することができます。私は元の入力パスワードのプロンプトが表示される必要があります、どのように私はそれをループするか、条件が満たされていない場合にこのプロンプトに戻ることができます –

+0

これはbのsumthinのようにif(password!= null && password.length()> 0) { System.out.println( "Password Updated"); passwordUpdated = true; } else { System.out.println( "WARN:無効なパスワードです。もう一度お試しください)"; 文字列prompt = "パスワードを入力"; } } } –

+0

1つの質問ですが、「パスワードを入力してください」と表示したいですか?そうでない場合は、 '//System.out.print("Enter password:"); '行をコメントアウトしてください。無効なパスワードの場合にのみ印刷したい場合は、行をelseブロックに置き、警告メッセージとともに行をコメントアウトします。元の質問に期待される出力をいくつか追加すると便利です。 – Mahendra

0

forループを使用して、所定の回数を反復処理したいときに使用通常あるとありがとうございます。あなたのケースでは

は、 whileループは、より良いオプションのようになります。

boolean correctPassword = false; 
while(!correctPassword) { 

    String prompt = "Enter password "; 
    String pw = passwordProvider.getPassword(prompt); 

    if (pw != null && pw.length() > 0) 
    { 
     passwordProvider.status("Password Updated"); 
     correctPassword = true; 
    } else { 

     System.out.println("Invalid password, please try again"); 
    } 
} 
あなたはケースとして(が trueまたは falseある与えられた 状態になるまで反復に残しておきたいときに使用されている

whileループかもしれません)。

上記コードはまた、代わりforループを使用するように変更することができる:

boolean correctPassword = false; 
for(;!correctPassword;) { 

    String prompt = "Enter password "; 
    String pw = passwordProvider.getPassword(prompt); 

    if (pw != null && pw.length() > 0) 
    { 
     passwordProvider.status("Password Updated"); 
     correctPassword = true; 
    } else { 

     System.out.println("Invalid password, please try again"); 
    } 
} 

上記フラグがtrueなるまで反復し続けるであろう無限forループを作成する必要があります。ご覧のとおり、これはループがwhileループより読みにくく、混乱する可能性があります。

編集:このコードは、私のためのようにepxected作品:

import java.util.*; 

public class HelloWorld{ 

    public static void main(String []args){ 
     boolean correctPassword = false; 
     while(!correctPassword) { 
      Scanner input = new Scanner(System.in); 
      String prompt = "Enter password "; 
      String pw = input.nextLine(); 
      System.out.println(pw.length()); 

      if (pw != null && pw.length() > 0) 
      { 
       System.out.println("Password Updated"); 
       correctPassword = true; 
      } else { 

       System.out.println("Invalid password, please try again"); 
      } 
     } 
    } 
} 
+0

それを試してみましたが、今は何も聞いていません –

+0

これでいくつかのシナリオを試してみました。 –

+0

@samujoe:私の編集を参照してください。私はあなたが何をしているかを行う完全なコードサンプルを追加しようとしました。 – npinti

関連する問題