1

Java の Console オブジェクト、特にreadPassword()メソッドでとんでもない問題が発生しています。

パスワードを 2 回読み取り、2 つのパスワードが同じになるまでループする現在のコードがあります。

do {
    dbPasswordOne = userInput.readPassword("Enter a password for the bookstall: ");
    System.out.println(dbPasswordOne.toString());
    dbPasswordTwo = userInput.readPassword("Re-enter the password: ");
    System.out.println(dbPasswordTwo.toString());
} while (!Arrays.equals(dbPasswordOne, dbPasswordTwo));

私の目には、これで問題なく動作するはずです (印刷は単にデバッグ目的のためのものです。ただし、これは Linux ターミナルで得られる出力です。

Enter a password for the bookstall: 
[C@9e4acce
Re-enter the password: 
[C@40d0d75

何を入力したかに関係なく、実行するたびに常に同じ2つの意味のない文字列です。どんな助けでも大歓迎です。

4

3 に答える 3

8

を呼び出しtoString()ていchar[]ます。これは をオートボックス化し、表示char[]されている文字列はその参照名です。に変換する必要がありchar[]ますString

試すSystem.out.println(new String(dbPasswordOne));

于 2012-12-30T22:01:46.907 に答える
3

dbPasswordTwo.toString() toString()参照名が出力されるため、使用しないでください。削除するだけtoString()です。

PrintWriterこれにはSystem.outprintln(char[])thenと呼ばれるメソッドがあります。toString()これはすべての文字を出力し、メソッドを暗黙的に呼び出しません。

于 2012-12-30T21:59:42.777 に答える
1

これは、おそらく使用していると思われる「Console.readPassword()」の例を基にした完全な例です。

/*
 * REFERENCE:
 * http://www.java2s.com/Tutorial/Java/0120__Development/Readpasswordfromconsole.htm
 *
 * SAMPLE OUTPUT:
 * Enter your login: abc
 * Enter your old password:
 * You entered: def...
 */
import java.io.Console;
import java.io.IOException;
import java.util.Arrays;

public class X {

  public static void main(String args[]) throws IOException {

    Console c = System.console();
    if (c == null) {
      System.err.println("No console.");
      System.exit(1);
    }

    String login = c.readLine("Enter your login: ");
    char[] oldPassword = c.readPassword("Enter your old password: ");

    String sPassword = new String(oldPassword);
    System.out.println ("You entered: " + sPassword + "...");
  }
}

行に注意してくださいString sPassword = new String(oldPassword);。これは、char[] 配列を印刷可能な文字列に変換します。

「お役に立てば幸いです!

于 2012-12-30T22:05:42.970 に答える