2015-12-23 16 views
5

私はJavaのプロジェクトでデジタルタイムマシンのような仕事をしています。それは基本的に特定の状況で起こったことを保存し、特定のファイルにアーカイブし、安全な保管のためにディレクトリに保存します。今私はパスワード機能に取り組んでいます。私はそれが正しいか間違っているかをチェックするための基礎を持っていますが、間違った答えを入力すると、クラスは「無効なパスワード」と言って終了します。 elseステートメントの末尾からmainの先頭までループする方法はありますか?毎回クラスを再実行する必要はありませんか?Javaの特定のポイントから別のポイントへのループ?

import java.util.Scanner; 
import java.util.*; 

public class Adam { 

    public static void main(String args[]) { 

     String passwrd = "password"; 
     String inputPassword; 

     System.out.print("Please Input Password "); 
     Scanner sc = new Scanner(System.in); 
     inputPassword = sc.nextLine(); 

     if (inputPassword.equals(passwrd)) { 
      System.out.println("Password Accepted, Loading Archive..."); 
     } else { 
      System.out.println("Invalid Password"); 
     } 
    } 
} 
+3

は、それはあなたが望むように聞こえる 'do' /' while'ループ... DO-whileループにパスワードを受け付けるためのコードを移動し –

+1

。ループを終了するには、パスワードが有効でなければなりません。 –

+0

パスワードはハッシュされ、 "パスワード"としてハードコードされていません – WalterM

答えて

3

ユーザ入力はその後、他のループではないが継続無効である場合は、do-while文を使用することができます。

import java.util.Scanner; 
import java.util.*; 

public class Adam { 

    public static void main(String args[]) { 
     String passwrd = "password"; 

     String inputPassword; 
     boolean b = true; 
     Scanner sc = new Scanner(System.in); 
     do { 

      System.out.print("Please Input Password "); 

      inputPassword = sc.nextLine(); 

      if (inputPassword.equals(passwrd)) { 

       System.out.println("Password Accepted, Loading Archive..."); 
       b = false; 
      } else { 

       System.out.println("Invalid Password"); 
       b = true; 

      } 

     } while (b); 

    } 
} 

DEMO

+1

ありがとう、これは多くの助けになりました! – Gman0064

0

ちょうどあなたがパスワードがワリド

public static void main(String args[]) 
{ 
    String passwrd = "password"; 
    String inputPassword; 

    while(true) 
    {  
     System.out.print("Please Input Password "); 
     Scanner sc = new Scanner(System.in); 
     inputPassword = sc.nextLine(); 

     if (inputPassword.equals(passwrd)) 
     { 
      System.out.println("Password Accepted, Loading Archive..."); 
      break; //here you are getting out of loop 
     } 
     else 
     { 
      System.out.println("Invalid Password"); 
      //you are not breaking loop so the program will return to the beggining 
     } 
    } 
} 
+0

'while(true)'ループが見苦しく、パスワードが無効な場合にフラグを使用します。 'while(!passwordCorrect){... if(inputPassword.equals(passwrd)){passwordCorrect = true; ...} ' – LordAnomander

+0

@brownフラグも非常に醜いので、' do/while'ループが存在します。 – Tom

0
​​
0

である場合には、パスワードを入力する試行の数が限られているのは良いアイデアだ壊れますしばらく(真の)ループに全体のコードを入れて。パスワードの入力を3回の試行を持っているたとえば、あなたはこのコードを持っていると思います:

Scanner sc = new Scanner(System.in); 
for (i = 0; i < 4; ++i) { 
    System.out.print("Please Input Password "); 
    inputPassword = sc.nextLine(); 

    if (inputPassword.equals(passwrd)) { 
     System.out.println("Password Accepted, Loading Archive..."); 
     break; 
    } 
    else { 
     System.out.println("Invalid Password"); 
    } 
} 
0

私はあなたのプログラムの中で1つのwhileループと1つのフラグを追加しました。あなたは、いくつかのコードを実行して結果を確認して、最も明白な構造がdo whileで、必要に応じて繰り返したいときはいつでも

public static void main(String[] args) { 
     String passwrd = "password"; 

     boolean wrongPassword = true; 

     while(wrongPassword){ 

      String inputPassword; 

      System.out.print("Please Input Password "); 
      Scanner sc = new Scanner(System.in); 
      inputPassword = sc.nextLine(); 

      if (inputPassword.equals(passwrd)) { 

       System.out.println("Password Accepted, Loading Archive..."); 
       wrongPassword = false; 

      } 
      else { 
       System.out.println("Invalid Password"); 
      } 
     } 

    } 
2

:見てください。次のような

何か:

String inputPassword = null; 
do { 
    if (inputPassword != null) 
     System.out.println("Invalid password"); 
    System.out.println("Enter password"); 
    inputPassword = sc.nextLine(); 
} while (!inputPassword.equals(password)); 
0

は、DO-whileループを使用します。

String passwrd = "password"; 
String inputPassword =""; 
Scanner sc = new Scanner(System.in); 

do{ 
    System.out.print("Please Input Password "); 
    // get the password from user 
    inputPassword = sc.nextLine(); 

    // if password matches print success and break out of loop 
    if (inputPassword.equals(passwrd)) { 
     System.out.println("Password Accepted, Loading Archive..."); 
     break; 
    } 
    else{ 
     System.out.println("Invalid Password"); 
    } 

    }while(true); 
+0

ここで 'while(true)'はなぜですか? – WalterM

+0

@WalterM yup ur right – Ramanlfc

0

使いますか-whileループ。また、コードにはセキュリティ上の問題があります。

  1. パスワードにはSystem.inを使用しないでください。代わりにコンソールを使用してください。 (ただし、IDEからプログラムを実行すると、コンソールが表示されない場合があります)。

  2. 入力後すぐにパスワードをハッシュしてください。

  3. 入力後、できるだけ早くパスワードバッファをクリアします(上書きする)。詳細はConsoleのドキュメントを参照してください。

    Console con = System.console(); 
    if (con == null) 
        throw new IOException("This JVM has no console"); 
    
    boolean pwdCorrect; 
    do { 
        char[] inputPassword = con.readPassword("Please input password: "); 
        String hashedInputPassword = hashPassword(inputPassword); // search Internet for how to hash a password 
        for (int i = 0; i < inputPassword.length; i++) 
         inputPassword[i] = '\0'; 
        pwdCorrect = isValidPassword(hashedInputPassword); // e.g. by looking it up in a password file 
        if (pwdCorrect) 
         System.out.println("Password accepted. Loading archive..."); 
        else 
         System.out.println("Invalid password."); 
    } while (!pwdCorrect); 
    
関連する問題