3

在下面的示例中,我尝试接受来自用户的单个字符输入,但是在运行程序时,我执行了多次 do..while 循环。请看下面程序的结果。

如果有人可以帮助我回答,如何解决这个问题?

import java.io.*;



public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {



            char c;
           // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            DataInputStream in =new DataInputStream(System.in);

            // Asking the user what to do with the application
           do{ 

            System.out.println("Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' ");          

            byte b = in.readByte();
            c = (char) b;
            c = Character.toUpperCase(c);

            if (c=='Y'){
                System.out.println(c);
               }
            else if (c=='N') {
              System.out.println(c);
            }
            else if (c=='E'){
               System.out.println(c); 
            }
            else{
                System.out.println("Incorrect Entry, try again: "+c); 
            }

           }while (c!='E');

    }

}

输出

init:
deps-jar:
compile:
run:
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
asdfgaf
Incorrect Entry, try again: A
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: S
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: D
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: F
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: G
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: A
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: F
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
Incorrect Entry, try again: 

Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' 
4

6 回答 6

2

使用 DataInputStream 可能不是处理您的情况的最佳方法。

DataInputStream 缓冲您键入的输入,这就是为什么您会通过循环获得不需要的冗长消息。

尝试改用扫描仪。这是扫描仪的示例:

Scanner objScanner = new Scanner(System.in);
char c = objScanner.next().charAt(0);
System.out.println(c);
于 2013-02-14T09:24:04.213 回答
2

使用 System.in.read() 而不是 DataInputStream。

于 2013-02-14T09:30:42.900 回答
1

用于获取输入的用户扫描程序类。它是解决您的问题的好方法。

Scanner scan = new Scanner(System.in);
System.out.println(scan.next().charAt(0));
于 2014-01-03T07:18:38.703 回答
1

DataInputStream( InputStream) 本质上是一个二元结构。如果您想读取文本数据(例如从控制台),您应该使用 Reader。在源代码中有一个注释掉BufferedReader。最好使用相同的而不是DataInputStream. 您可以执行以下操作,

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String input = in.readLine();

或者您可以使用DataInputStream.readLine(),但由于某种原因不推荐使用。并且它也建议在那里使用BufferedReader.readLine().

您可以选择其他选项,例如Scanner

于 2013-02-14T09:36:55.797 回答
0

由于这个线程还没有接受的答案,即使它真的很旧,我仍然会回答;对于仍然想要解释的人。

对于这种情况,使用 aScanner是最好的主意。扫描仪易于使用,并停止线程直到完成。您可以利用它来发挥自己的优势,或者您可以创建一个新线程来保持当前线程运行。扫描仪的基本用法:

Scanner s = new Scanner(System.in) //Makes a new scanner with System.in
String letter = s.next(); //Use next to find the character typed
//Insert code using letter variable

“字母”将返回扫描仪中空格之前的所有内容。要仅找到第一个字母,请拆分字符串,""然后取数组的第一个(第 0 个)。

最后,从这个线程中引用了一个关于扫描仪的好引述

next() 只能读取输入直到空格。它无法读取以空格分隔的两个单词。此外,next() 在读取输入后将光标放在同一行。

nextLine() 读取输入,包括单词之间的空格(也就是说,它读取到行尾 \n)。读取输入后,nextLine() 将光标定位到下一行。

后来在找多个词的时候,用nextLine()代替next()得到完整的String

于 2016-11-18T00:17:05.380 回答
-1

可能在上面的执行示例中,您将输入输入为“asdfgaf”,然后按回车键。因此,它一次将 A、S、D、F .... 作为输入一个字符。您应该输入“y”或“n”或“e”(一次单个字符),然后按 Enter。

例如,您是否想访问您的帐户,如果是,请输入“Y”,或者如果您想创建一个新帐户,请按“N”退出按“E”:y

于 2013-02-14T09:26:01.340 回答