Java输入:扫描程序或IOException

Java输入:扫描程序或IOException,java,input,java.util.scanner,ioexception,Java,Input,Java.util.scanner,Ioexception,我在学校上Java课,老师说我应该使用Scanner类的实例从控制台读取输入 例如: import java.util.Scanner; Public class ExampleName { public static void main(String[] args) { Scanner input = new Scanner(System.in); char letter; letter = input.nex

我在学校上Java课,老师说我应该使用
Scanner
类的实例从控制台读取输入

例如:

import java.util.Scanner;

Public class ExampleName {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);            
        char letter;

        letter = input.next().charAt(0);
    }
}
import java.io.IOException;

Public class ExampleChar {
    public static void main(String[] args) throws IOException {
        char letter;

        letter = (char) System.in.read();
    }
}
然而,整个夏天我都在读这本书,书中说使用
System.in.read()
来读取输入

例如:

import java.util.Scanner;

Public class ExampleName {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);            
        char letter;

        letter = input.next().charAt(0);
    }
}
import java.io.IOException;

Public class ExampleChar {
    public static void main(String[] args) throws IOException {
        char letter;

        letter = (char) System.in.read();
    }
}

哪种形式正确?获取基本输入(char、int、double等)应该使用哪种形式?

Scanner
System.in.read()
是从Java代码读取输入的不同方法,但结果是相同的,这取决于程序员选择应该使用什么。

都是从控制台获取输入的有效方法

使用可以使事情变得更简单,因为它提供了更多可用于检索输入的方法,如
nextFloat
nextInt
,以及可用于验证输入的方法,如
hasNextDouble

System.in
)的功能更加有限,只提供了一些
read
方法,这意味着它可能需要额外的手动工作


要从控制台读取标准输入(如double、int等),我将使用
新扫描仪(System.in)
方法。使用对您最有意义的方法。

在您的示例中,您是否注意到在初始化
扫描仪时,您将其传递给
系统。

System.in
返回
InputStream
的实例(从JDK1.0开始)

“标准”输入流。此流已经打开,可以提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源

扫描器
(自JDK1.5起)使用
系统中的
输入流
,并使用正则表达式解析
输入流
,从而更容易访问
系统中包含的数据

Scanner(System.in)构造一个新的扫描器,该扫描器生成从指定输入流扫描的值。流中的字节使用底层平台的默认字符集转换为字符

我建议使用
Scanner
,它通过提供以下方法使代码更干净,更易于维护:

next()
-返回next
String

nextInt()
-返回next
int

nextDouble()
-返回下一个
double


next(Pattern Pattern)
-返回下一个匹配的字符串
Pattern

除了前面的答案之外,我想说的是,您可以使用以下方法-

  • nextInt()
    -用于读取
    integer
  • nextDouble()
    -用于读取
    double
  • nextByte()
    -用于读取
    byte
  • nextLong()
在这里,您添加的
next()
方法用于整体读取任何
标记


有关更多详细信息,请参见
扫描仪的

两者都是不同的方式。就我所知,第一种是最常用的。我同意@Christian-这也是我见过的最常见的方式。另一个优点是,您现在可以使用一个对象执行其他功能。我不知道InputStream与扫描仪和System.in的关系如何,谢谢!