Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java进行输入_Java_Input_User Input - Fatal编程技术网

用Java进行输入

用Java进行输入,java,input,user-input,Java,Input,User Input,如果有人能帮忙,我会有些困惑。尝试在网上搜索,但没有得到满意的答案 为什么我们不简单地使用System.in.somemethod()来获取Java中的输入,就像我们获取输出一样?就像使用System.out.println()一样,为什么不按原样使用System.in?为什么输入的过程很长 在中,系统提供的唯一方法是读取的重载。当然,你可以这样做: byte[] bytes = new byte[5]; System.in.read(bytes); System.out

如果有人能帮忙,我会有些困惑。尝试在网上搜索,但没有得到满意的答案


为什么我们不简单地使用
System.in.somemethod()
来获取Java中的输入,就像我们获取输出一样?就像使用
System.out.println()
一样,为什么不按原样使用
System.in
?为什么输入的过程很长

在中,
系统提供的唯一方法是
读取
的重载。当然,你可以这样做:

    byte[] bytes = new byte[5];
    System.in.read(bytes);
    System.out.println(Arrays.toString(bytes));
从控制台读取五个字节。但这有以下缺点:

  • 您需要处理选中的
    IOException
    。(上面的代码段中未显示)
  • 很难使用字节。(除非您特别想要)
  • 您通常只想读取输入,直到一行结束。有了这个,很难知道一条线的终点在哪里

这就是为什么人们使用
Scanner
s将
系统包装成更加用户友好的流。

从命令行输入总是比输出数据更棘手。这是因为无法知道输入在语义上是否正确、结构是否正确,甚至语法是否正确

若您只想从
系统中读取字节,那个么输入的许多不确定性就会消失。在这种情况下,只有两件事需要考虑:I/O错误和输入结束-这两件事在
System.out
中也存在。另一件可能很棘手的事情是,
InputStream
可能不会返回在对
read
的单个调用中请求的所有字节


所以从
系统中读取数据并不难;解释数据——通常归结为解析数据或验证数据——是困难的部分。这就是为什么经常使用
Scanner
类来理解输入。

就像不能使用
System.out.somemethod()
而不是
System.out.println()
一样,不能使用
System.in.somemethod()
而不是
System.in.read()

所以System.in.read只能处理字节?没有其他数据类型?@SQR没错。不过,您可以将字节转换为字符串。但是我宁愿使用
扫描仪
。还有一件事。。更好的办法是什么?扫描仪还是InputStreamReader?@SQR在我看来肯定是
Scanner
<代码>扫描器< /代码>的方式更强大,除非你的需求表明你需要使用单独的字节,这是非常罕见的。@ SQR如果你认为我的答案回答你的问题,请考虑通过点击那个检查标记来接受它。我觉得你把这个理解得有点太字面了,只是一般而已。事实上,我还不是一个专业的开发人员,所以我为我犯的任何错误道歉。请不要为我不是一个“专业人员”而道歉——不管这意味着什么。有很多“业余爱好者”比一些专业人士要好。
somemethod
的要点是,您可以将其替换为任何其他方法名称,例如
read
。它不是方法的实际名称。请注意,您可以反勾`以指示答案中的代码。由于误解,这不是最好的答案,但请务必过来再试一次。在假设阅读我答案的人不是哑巴之后,实际上我并没有使用反勾来表示方法。下次我会记得你的小费。请看一下链接。这个链接有一些问题。由于您不知道系统使用的编码,因此即使输入是同一个字符,也可能会得到不同的值。根据系统的不同,可以使用UTF-8或Windows-1252对输入字符进行编码,这意味着非US-ASCII字符的值不同。对于UTF-16BE输入,您甚至可以得到十进制
0
,即使是字符
9
,如示例所示。或
FF
/
FE
,如果输入开始时存在BOM。