我看到许多人使用java.lang.Scanner。
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
但是,我在一些书中提到了代码:
class Guess {
public static void main(String args[])
throws java.io.IOException {
char ch, answer = 'K';
System.out.println("I'm thinking of a letter between A and Z.");
System.out.print("Can you guess it: ");
ch = (char) System.in.read(); // read a char from the keyboard
if(ch == answer) System.out.println("** Right **");
}
}
我只想知道使用第一个示例和使用System.in.read()之间的区别。
谢谢!如果要在程序中添加用户输入,还需要抛出java.io.IOException吗?它做了什么?
答案 0 :(得分:1)
这读取整数
int i = sc.nextInt();
e.g。如果你输入
1234
它将返回int
值1234
这会为您按下的每个键读取一个字符
char ch = (char) System.in.read();
char ch2 = (char) System.in.read();
char ch3 = (char) System.in.read();
char ch4 = (char) System.in.read();
char ch4 = (char) System.in.read();
如果你输入
1234<enter>
它会有
ch == '1'; // == 49
ch2 == '2'; // == 50
ch3 == '3'; // == 51
ch4 == '4'; // == 52
ch5 == '\n'; // == 10
答案 1 :(得分:0)
由于您的猜测必须是一个字符,因此使用第一个示例输入一个字符会抛出java.util.InputMismatchException
,而且基本上扫描程序会在reading single characters中吮吸,即使第二个解决方案也有自己的缺陷并且不会工作尝试输入Katastrophe
,对于IOException,方法System.in.read()
抛出它,所以你要么抓住它,要么自己抛出它!
答案 2 :(得分:0)
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
在上面的情况下,我们在这里创建扫描器的对象(即sc),sc.nextInt()
从用户获取输入,因此如果用户输入一个整数值,假设为'3',则该值存储到变量a;
在第二种情况ch = (char) System.in.read();
这里System.in.read()
读取您按下的键的字符并将其存储到变量ch中。您还可以使用扫描仪读取字符或字符串,如sc.next();
,如果您必须读取带空格的字符串(例如“你好!!!”),那么您可以使用sc.nextLine()
答案 3 :(得分:0)
Scanner.next()和System.in.read()只是从“外部世界”(文件系统,控制台等)获取数据到程序的几种方法。
当java.lang.Scanner不仅能够读取单个符号而且读取整行时,System.in.read()只读取单个字符。
Scanner sc = new Scanner(System.in);
在上面的示例中,“sc”在其方法中使用System.in.read()。
你的例子之间的主要区别在于,在第一个例子中,Scanner调用System.in.read()本身,但在最后一个例程中,程序员显式调用它。
Java I / O是一个非常大的话题。你最好深入研究所有的概念。有些软件包包含IO功能:java.io,java.nio
大多数IO方法抛出IOException。这是一个已检查的异常,因此您必须在try-catch块中捕获它或在'throws'关键字后添加方法签名。