首页 > 编程知识 正文

scanner is never closed,java scanner类

时间:2023-05-05 06:18:56 阅读:111390 作者:4618

Scanner是否使用nextInt ()、nextLine ()等方法将Scanner.next聚集在一起以解决问题? )方法介绍Scanner.next? )有很多种方法,具体名称和内容请参考下表。

关于Scanner.next? )的输入问题和分析中,首先让我们通过代码直观地感受一下使用scanner时经常出现的问题。

sanner scanner=new scanner (system.in; System.out.printf ('请输入您的姓名: ); String name=scanner.nextLine (; 请输入System.out.printf ('您的出生年份: '; int age=scanner.nextInt (; System.out.printf (请输入'喜欢的花: ' ); String nan=scanner.nextLine (; System.out.printf ('你叫: ' name '%n你出生年份是:' age '%n你喜欢的花是:' nan ); 乍一看没有任何问题,是三个简单的输入和读取。 但是请看结果的输出:

请输入你的名字3360ASD请输入你的出生年月日12请输入你喜欢的花:你的名字: asd你的出生年月日:12你喜欢的花: processfinishedwithed

为什么会这样呢?

这是否涉及上表中提到的Scanner.next? )方法结束接收条件我们在复用Scanner时,其实是在同一个缓存区中输入数据,但结束接收条件其实是不同的“3358www.Sina.com/” 快速看一下例子和图解,加深理解吧。

sanner scanner=new scanner (system.in; String name=scanner.nextLine (; String age=scanner.nextLine (; String nan=scanner.nextLine (; system.out.printf (' name : ' name ' % nage : ' age ' % nnan : ' nan ); 结果: 122321 name :12 age :23 nan :21 processfinishedwithexitcode 0

此时的缓冲区内容为12n23n21n。 这三个数字为什么要准确地分配给变量name、age和nan呢? 因为scanner.nextLine (); 函数断句符号此函数在接收到键盘输出后,n可以停止接收并执行以下程序: n这是我们在日常程序中进入下一个输入时按下的回车。

可以说是同样的事情。 如果上面的程序输入正常的话,缓冲区的内容是结束接收条件为n那么出问题了。 第二个程序使用scanner.nextLine ()。 根据、n的位置完全读取所有数据,并将其分配给相应的变量。 现在,我们分别是scanner.nextLine ();scanner.nextInt (;scanner.nextLine (;他们的结束接收条件分别为asdn12nCornflowern以下三个函数将数据读取如下。

很明显,第二个scanner.nextInt ()遇到n 、数值、n后立即结束接收,在我按下“进行下一个输入”的返回后不久,第三个scanner.nextLine 的接收。 因此,在无法输入后面的数据之前,程序可能会结束。

有解决方法吗?

一定可以吧

方法很简单,数值12这样错误地用第三种方法接收到的“n”将被其他方法代替。 然后是第三个scanner.nextLine (; 这样就可以正常接收数据了。

其中包括scanner.nextLine (); 之后的缓冲区读取情况:

其中包括scanner.nextLine (); 后程序和执行结果:

sanner scanner=new scanner (system.in; System.out.printf ('请输入您的姓名: ); String name=scanner.nextLine (; System.out.printf ('请输入您的出生年份); int age=scanner.nextInt (; scanner.nextLine (; //添加的System.out.printf (请输入“喜欢的花:”); String nan=scanner.nextLine (; System.out.printf ('你叫: ' name '%n你出生年份是:' age '%n你喜欢的花是:' nan ); 请输入你的名字3360ASD请输入你的出生年月日12请输入你喜欢的花: Cornflower你的名字: asd你的出生年月日:12你喜欢的花: Cornflower

就是在第二个和第三个方法之间加简单的 scanner.nextLine(); 方法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。