在java中从控制台获取输入

时间:2014-02-27 22:20:25

标签: java

我使用以下代码段从java中的控制台获取10个输入,并尝试以*******12格式打印它们。在运行时,我输入12,13,14,15作为输入,然后程序终止。现在有3个问题:

  1. 为什么此代码只获得5个输入而不是10?
  2. 为什么此代码打印例如49,52,10用于输入14?
  3. 解决方案是什么?
  4. 代码:

    public static void main(String[] args) {
        for (int i = 0 ; i <10 ;i++){
            try {
                int j= System.in.read();
                System.out.println("**********"+j);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
        }
    }
    

    ,输出结果为:

    12
    **********49
    **********50
    **********10 13
    **********49
    **********51
    **********10 14
    **********49
    **********52
    **********10 15
    **********49
    

    建立成功(总时间:14秒)

5 个答案:

答案 0 :(得分:7)

49,52和10是您输入的字符的ASCII字符代码, 1 4 输入

您可以继续使用System.in.read(),并在每个角色到达时对其进行处理。您可以执行以下操作:

  • 收集键入的字符
  • 查找键入的数字,然后按 Enter
  • 将数字的ASCII码转换为十进制数

这当然正是Scanner.nextInt()为你做的事情。

答案 1 :(得分:3)

您可能希望使用ScannernextInt()方法。试试这个:

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    for (int i = 0; i < 10; i++) {
        int j = s.nextInt();
        System.out.println("**********" + j);
    }
}

请注意,read()InputStream类的方法。您通常不希望直接访问InputStream

答案 2 :(得分:1)

如果您在IDE之外运行它

String input = System.console().readLine();

答案 3 :(得分:1)

当您编写一个字符然后按Enter键时,它会转换为3个字节:character_code + \ r + \ n。在你的情况下,i变量需要3次迭代。

对于输入的2个字符,它会转换为:character_code + character_code + \ r + \ n。这需要4次迭代。

顺便说一句,我有相同代码的另一个输出:

12           
**********49 
**********50 
**********13 
**********10 
13           
**********49 
**********51 
**********13 
**********10 
14           
**********49 
**********52 

答案 4 :(得分:0)

这也应该有助于你想要使用bufferedReader

public static void main(String[] args) throws NumberFormatException, IOException {
    BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));

    for(int i = 0; i<10; i++){
        int inp = Integer.parseInt(stdin.readLine());
        System.out.println("----------- "+inp);
    }