如何仅使用 Scanner class 的对象进行输入?
How input was taken just using object of Scanner class?
public class Two {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int c=0;
while(sc.hasNext())System.out.println(++c+" "+sc.nextLine());
}
}
我遇到了这段代码,我想确认通过直接获取输入而不使用任何数据类型的对象,我们所做的只是获取输入并显示它,而不是将其存储在任何地方?
还有 while 循环中的条件是如何第一次为真?由于我们还没有给出任何意见。
当然,您的代码不存储 sc.nextLine()
,因此该值将在 System.out.println
指令之后被丢弃。
也适用于 hasNext():
This method may block while waiting for input to scan.
所以一旦流开始提供输入,条件就会满足,并且该方法将阻塞等待这种情况发生或 Exception
发生(例如:如果扫描仪关闭)。
只要这些事情都没有发生,hasNext()
方法就不会 return,所以 while
中的条件仍然没有被计算,所以循环被阻塞在那里。
让我们检查一下您的代码:
Scanner sc = new Scanner(System.in)
java.util.Scanner.Scanner(InputStream)
构造函数被调用,并且您有一个类型为 Scanner
的对象 sc
,它读取自 System.in
.
int c = 0;
您现在拥有原始类型 int
的原始 c
。
while(sc.hasNext()) { ... }
while
循环计算 sc.hasNext()
,即 true
。根据文档,当且仅当输入中包含另一个标记时,sc.hasNext()
returns true
。在您的情况下,这意味着 InputStream
已打开。
{... System.out.println(++c + " " + sc.nextLine()); ...}
sc.nextLine()
是问题所在。假设您没有更改 System.in
,console/terminal 将阻止循环(即保持循环暂停),直到您给它一个输入(输入一些文本并点击 [ENTER]
)。
总的来说:
当且仅当可以获得更多输入时,Scanner::hasNext()
才会 return 为真(如果您使用 System.in
,这将始终为真,直到您关闭扫描仪) .
如果您直接打印输入,则不会存储对它的任何引用,也不会为其分配内存(除非 Scanner.nextLine()
将其存储在某处)。
public class Two {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int c=0;
while(sc.hasNext())System.out.println(++c+" "+sc.nextLine());
}
}
我遇到了这段代码,我想确认通过直接获取输入而不使用任何数据类型的对象,我们所做的只是获取输入并显示它,而不是将其存储在任何地方?
还有 while 循环中的条件是如何第一次为真?由于我们还没有给出任何意见。
当然,您的代码不存储 sc.nextLine()
,因此该值将在 System.out.println
指令之后被丢弃。
也适用于 hasNext():
This method may block while waiting for input to scan.
所以一旦流开始提供输入,条件就会满足,并且该方法将阻塞等待这种情况发生或 Exception
发生(例如:如果扫描仪关闭)。
只要这些事情都没有发生,hasNext()
方法就不会 return,所以 while
中的条件仍然没有被计算,所以循环被阻塞在那里。
让我们检查一下您的代码:
Scanner sc = new Scanner(System.in)
java.util.Scanner.Scanner(InputStream)
构造函数被调用,并且您有一个类型为 Scanner
的对象 sc
,它读取自 System.in
.
int c = 0;
您现在拥有原始类型 int
的原始 c
。
while(sc.hasNext()) { ... }
while
循环计算 sc.hasNext()
,即 true
。根据文档,当且仅当输入中包含另一个标记时,sc.hasNext()
returns true
。在您的情况下,这意味着 InputStream
已打开。
{... System.out.println(++c + " " + sc.nextLine()); ...}
sc.nextLine()
是问题所在。假设您没有更改 System.in
,console/terminal 将阻止循环(即保持循环暂停),直到您给它一个输入(输入一些文本并点击 [ENTER]
)。
总的来说:
当且仅当可以获得更多输入时,Scanner::hasNext()
才会 return 为真(如果您使用 System.in
,这将始终为真,直到您关闭扫描仪) .
如果您直接打印输入,则不会存储对它的任何引用,也不会为其分配内存(除非 Scanner.nextLine()
将其存储在某处)。