2016-12-30 8 views
1

私は1つのこと以外はすべて動作していると思います。メソッドをmainで複数回呼び出すと、同じパスワードが作成され続けます。パスワードを作成するJavaプログラムを作成しようとしています

import java.util.Random; 

public class PasswordRandomizer { 
    // Define the variables 
    private int length; 
    private String password; 
    private Random random = new Random(); 
    private char symbol; 

    public PasswordRandomizer(int length) { 
     // Initialize the variable 
     password = ""; 
     this.length = length; 
     while (this.password.length() < this.length) { 
      this.symbol = "abcdefghijklmnopqrstuvwxyz".charAt(this.random.nextInt(25)); 
      this.password += symbol; 
     } 
    } 

    public String createPassword() { 
     // write code that returns a randomized password 
     return this.password; 
    } 
} 

、これは私がメインに持っているものです::

は、ここでパスワードを作成するためのクラスです

public class Program { 
    public static void main(String[] args) { 
     PasswordRandomizer randomizer = new PasswordRandomizer(13); 
     System.out.println("Password: " + randomizer.createPassword()); 
     System.out.println("Password: " + randomizer.createPassword()); 
     System.out.println("Password: " + randomizer.createPassword()); 
     System.out.println("Password: " + randomizer.createPassword()); 
    } 
} 

私はこのような出力になるだろう:

Password: seggdpsptkxqo 
Password: seggdpsptkxqo 
Password: seggdpsptkxqo 
Password: seggdpsptkxqo 

私が持っている他の間違いや悪い習慣を指摘しても、私はまだかなり新しいです。

+3

あなたがいない「作成」方法では、コンストラクタでパスワードを計算している。RandomStringUtilsで

は、一定の長さのランダムな文字列を生成するための方法があります;) – Ray

+0

実際の作成コードをコンストラクタから独自のメソッドまたはcreatePasswordメソッドに移動させてください – LaneL

+0

あなたには基本的な誤解があると思います。これを見てください:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html – smddzcy

答えて

4

あなたのコードを見てみましょう。

あなたのコンストラクタでは、あなたの長さを初期化して、パスワードを生成します。

public PasswordRandomizer(int length) { 
    // Initialize the variable 
    password = ""; 
    this.length = length; 
    while (this.password.length() < this.length) { 
     this.symbol = "abcdefghijklmnopqrstuvwxyz".charAt(this.random.nextInt(25)); 
     this.password += symbol; 
    } 
} 

次に、あなたのcreatePassword方法では、あなたはそれを変更せずに、あなたは、コンストラクタで生成され、そのパスワードを返します。

public String createPassword() { 
    // write code that returns a randomized password 
    return this.password; 
} 

したがって、createPasswordに電話するたびに、同じことが起こります。あなたが使用することができ

Password: mvlqqgfmotldc 
Password: inneuyuynqakd 
Password: hstlfsfspfaua 
Password: jgngsmdiguxcy 
+1

非常に良い説明です。どうして私はpassword = ""を持たなければならないのか教えてください。パスワードを作成するには? – Budaika

+1

@ user3261806あなたはその行を削除することで自分自身を見つけることができます。 – Tom

+0

@ user3261806 - はい。一緒に考えてみましょう。 私たちが完全に取り除くと想像してください。 (あなた自身でこれを試してみるかもしれません)なぜ 'this.password.length()'を呼び出そうとすると、 'NullPointerException'を取得します。 これをコンストラクタに戻したとしましょう。今度は、 'createPassword()'を呼び出すたびに、同じパスワードを再度取得します。なぜあなたはこれがどう考えられるのですか? パスワードの生成方法を見てください。 'while(this.password.length()

2

新しいPasswordRandomizerプログラムを作成する必要があります。そうしないと、毎回パスワードを作成しません。たとえば、PasswordRandomizerクラスを書き換えない場合は、次のようにします。

package test; 
public class Program { 
    public static void main(String[] args) { 
     System.out.println("Password: " + new PasswordRandomizer(13).createPassword()); 
     System.out.println("Password: " + new PasswordRandomizer(13).createPassword()); 
     System.out.println("Password: " + new PasswordRandomizer(13).createPassword()); 
     System.out.println("Password: " + new PasswordRandomizer(13).createPassword()); 
    } 
} 
+0

これは ' createPassword'から 'getPassword()'へ – weston

0

:出力のようにあなたが得る、私たちはあなたのProgramを実行すると、今

import java.util.Random; 

public class PasswordRandomizer { 
    // Define the variables 
    private int length; 
    private String password; 
    private Random random = new Random(); 
    private char symbol; 

    public PasswordRandomizer(int length) { 
     // Initialize the variable 
     this.length = length; 
    } 

    public String createPassword() { 
     // write code that returns a randomized password 
     password = ""; 
     while (this.password.length() < this.length) { 
      this.symbol = "abcdefghijklmnopqrstuvwxyz".charAt(this.random.nextInt(26)); 
      this.password += symbol; 
     } 
     return this.password; 
    } 

} 

:我々はちょうどcreatePassword方法にダウンしたパスワードを生成し、そのコードを移動するとどうなるか見てみましょうApache Commons Langライブラリ。 randomAlphabetic(int型の数)

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RandomStringUtils.html#randomAlphabetic-int-

関連する問題