0

次のコードを考えると、readLine()の最初の呼び出しはブロックされておらず、「Entername:」と「Enteraddress:」の両方が同時に出力され、入力されたものすべてにアドレスが割り当てられます。なんで?私はそれらを別々のtryブロックに入れて、ループを取り除き、一般的に物事を並べ替えてみました。

public class AddressReader {

public static void main(String[] args) {

    Path file = Paths.get("d:/java IO/addresses.txt");

    try {
        Files.createDirectories(file.getParent());
    } catch (IOException e) {
        System.err.println("Error craeting directory: " + file.getParent());
        e.printStackTrace();
        System.exit(1);
    }
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int c = 0;
    try {
        System.out.println("<a>dd an entry or <r>ead entries");
        c = br.read();
    } catch (IOException e) {
        System.out.println("An error has occured, try again");
    }
    switch (c) {
    case 'a':
        String name = null;
        String address = null;

        while (name == null || name == "" || address == null || address == "") {
            try {
                System.out.println("Enter name:");
                name = br.readLine();
                System.out.println("Enter address:");
                address = br.readLine();
            } catch (IOException e) {
                System.out.println("An error has occured, try again");
            }
            System.out.println("name = " + name);
            System.out.println("address = " + address);
        }
        //writeEntry(file, name, address);
        break;
    case 'r':
        //readEntries(file);
        break;
    default:
        System.out.println("Invalid entry, try again.");
    }

}

}

4

2 に答える 2

3

これは、次の行によるものです。

c = br.read();

これは、を押して生成された改行文字を消費しませんENTER

この問題を解決するには、代わりにこれを使用してください。

c = br.readLine().charAt(0);
于 2013-02-17T22:24:36.080 に答える
0

すでに述べたことに加えて、あなたがやろうとしていることについては、代わりにコンソールを使用することをお勧めします。

Console console = System.console();
String name = console.readLine("Create a name.");
char[] password = console.readPassword("Create a password.");
System.out.println(name + ":" + new String(password));
于 2013-02-17T22:18:26.477 に答える