以下是代码,我写的是从用户那里得到两个输入。但是当我运行程序时,它只需要一个输入并自己生成另一个并计算错误的值。 请帮忙。感谢
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);
}
}
答案 0 :(得分:5)
System.in
是InputStream
- 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();
自动抛出异常。