System.in.read()方法

时间:2014-03-28 08:54:29

标签: java

以下是代码,我写的是从用户那里得到两个输入。但是当我运行程序时,它只需要一个输入并自己生成另一个并计算错误的值。 请帮忙。感谢

import java.io.IOException;
import java.util.*;

class ThrowsExcpt {
    int divide(int x, int y) throws ArithmeticException, IOException {
        return x / y;
    }
}

class ThrowsTemps {
    public static void main(String s[]) throws IOException {

        int x = System.in.read();
        int y = System.in.read();

        ThrowsExcpt th = new ThrowsExcpt();
        int r = th.divide(x, y);
        System.out.println(r);
    }
}

7 个答案:

答案 0 :(得分:5)

System.inInputStream - read()只读取一个字节。您的直接输入不止一个字节,因此在第一个输入中直接读取这两个值。

使用扫描仪(使用System.in作为输入):

 Scanner sc = new Scanner(System.in);
 int i = sc.nextInt();

更多示例: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

答案 1 :(得分:1)

尝试使用扫描仪对象来阅读用户的输入:

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();

答案 2 :(得分:1)

阅读()方法。

从输入流中读取下一个数据字节。值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1。此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。

来自http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read%28%29

因此请使用scanner

根据你的问题为什么不要求第二次输入?原因是read()方法等待输入源一旦获得输入,它就从该输入源逐字节获取。例如:

        inChar = System.in.read();
        i = System.in.read();
        i1 = System.in.read();
        System.out.print("You entered ");
        System.out.println(inChar);
        System.out.println(i);
        System.out.println(i1);

您输入abc作为输入,然后您将获得

Enter a Character:
abc
You entered 97
98
99

as out put是 a,b和c 的字节值。

说明:输入abc 字节数组

+--------------------+
| 97 | 98 | 99 | other byte value for **Enter**
+--------------------+ 

首先,System.in.read()将获得第一个数组索引,第二个将获得第二个索引,依此类推。

答案 3 :(得分:1)

为什么会发生不需要的分配?

按下ENTER后,键盘输入字符存储在输入缓冲区中。 ENTER包括输入字符中的换行符'\ n'。换行符'\ n'的十进制/整数值为10.

System.in.read()只读取输入字符中的第一个字符,将字符转换为整数并返回它。 该字符将从输入缓冲区中排除。

其余字符在输入缓冲区中仍处于待处理状态,直到System.in.read()以上述相同的方式读取它。

while

如何避免不必要的分配?

继续读取输入缓冲区的内容,直到它耗尽为止。

    int inputchar1, inputchar2, inputchar3;

    System.out.print("input: ");// input: 43

    // The line feed '\n' is generated when ENTER is pressed.
    // '4', '3' and '\n' are in the input buffer.

    inputchar1 = System.in.read(); // '4' is read and returns 52 (corresponding integer value)
    // '3' and '\n' is in the input buffer.

    inputchar2 = System.in.read(); // '3' is read and returns 51
    // '\n' is pending in the input buffer.

    inputchar3 = System.in.read(); // '\n' is read and returns 10
    // no more input character in the input buffer.

    System.out.println("inp1 =" + inputchar1);
    System.out.println("inp1 =" + inputchar2);
    System.out.println("inp1 =" + inputchar3);

    /*
     * Refer to ASCII table for char to decimal conversion.
     * Although java Char is 16-bit unicode ASCII is still applicable.
     */

参考:“Java:初学者指南6e” - Herbert Schildt

答案 4 :(得分:0)

如果您使用的是控制台,请尝试以下操作:

int x = Integer.parseInt(System.console().readLine());
int y = Integer.parseInt(System.console().readLine());

答案 5 :(得分:0)

嘿兄弟这应该适用于你需要我认为如果不让我知道

import java.io.IOException;
import java.util.Scanner;

public class noob{


class ThrowsExcpt {
    int divide(int x, int y) throws ArithmeticException, IOException {
        return x / y;
    }
}

class ThrowsTemps {
    public void main(String s[]) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number 1");
        int x = sc.nextInt();
 System.out.println("Enter number 2");
        int y = sc.nextInt();

答案 6 :(得分:0)

简单地说 -

int x = System.in.read();

自动抛出异常。

  • 你分配并定义了一个存储单元来保存一个int,然后分配一个字节存储在那里。重新输入输入或使用差异。输入法。