scanner.nextdouble nextline的bug?

Scanner类&&&next与nextLine方法的使用问题
关于nextLine()和next()的使用
关键在于:next()
方法遇见第一个有效字符(非空格,换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描。、
这时使用nextLine(),继续读,有可能读入第一个字符是空格或换行符。
&&&&在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。
在写作业的过程中,我发现用Scanner实现 字符串的输入有两种方法,一种是next(),一种
是nextLine(),但是这两种方法 究竟有什么区别呢?
&&&&我查了一些资料总结如下:
&&&&next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab、
或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法
才将其后的输入的空格键、Tab或Enter键等视为分隔符或结束符。简单地说,next()查找并返回
来自此扫描器的下一下完整标记。完整标记的前后是与分隔模式的输入信息,所以next方法不能得到
带空格的字符串。
&&&&而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是
可以得到带空格的字符串的。
&&&&鉴于以上两种方法的区别,同学样一定要注意next()方法
与nextLine()方法 的连用,举例如下:
import java.util.S
public class TestScanner2 {
public static void main(String[] args) {
String s1,s2;
Scanner &sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
//s1 = sc.nextLine();
s1=sc.next();
System.out.println("请输入第二个字符:");
//s2 = sc.next();
s2=sc.nextLine();
System.out.println("输入的字符串是:"+s1+" "+s2);
可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2键盘验证,我发现
其它的next的方法 ,如dobule nextDouble(),float nextFloat(),int
nextInt()等与nextLine()连用时都存在这个问题,解决办法是:在第一个next(),nextDouble(),nextFloat(),nextInt()等语句后加一个nextLine()语句,
将next()去掉的Enter结束符过滤掉,例如上面的程序改写为:
public static void main(String[] args) {
String s1,s2;
Scanner &sc = new
Scanner(System.in);
System.out.println("请输入第一个字符串:");
//s1 = sc.nextLine();
s1=sc.next();
sc.nextLine();
System.out.println("请输入第二个字符:");
//s2 = sc.next();
s2=sc.nextLine();
System.out.println("输入的字符串是:"+s1+" "+s2);
就可以了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。今天在学习关于I/O的知识的时候发现了一个小问题!
package com.paulo.
import java.io.F
import java.io.IOE
import java.io.PrintW
import java.util.S
public class TestFile {
public static void main(String[] args) throws IOException {
PrintWriter output = new PrintWriter("temp.txt");
output.print("Java");
Scanner input = new Scanner(new File("temp.txt"));
System.out.println("ok");
System.out.println(input.nextLine());                                output.close();
input.close();
}Exception in thread "main" java.util.NoSuchElementException: No line found&& &at java.util.Scanner.nextLine(Unknown Source)&& &at com.paulo.testio.TestFile.main(TestFile.java:17)
&而我在stackflow上或是在其它的网站上面找到的答案大多是说要先判断异常!!等等:like this
------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.paulo.
import java.io.F
import java.io.IOE
import java.io.PrintW
import java.util.S
public class TestFile {
public static void main(String[] args) throws IOException {
PrintWriter output = new PrintWriter("temp.txt");
output.print("Java");
output.close();
Scanner input = new Scanner(new File("temp.txt"));
while (input.hasNextLine()) {
//加一个循环用来判断
System.out.println("ok");
System.out.println(input.nextLine());
input.close();
对的这样写完之后是没有error了,,极好,,可是没有答案的输出!!!后来在我的研究之下发现了一点端倪!!!!把代码改成下面的即可!
PrintWriter output = new PrintWriter("temp.txt");
output.print("Java");
output.close();
//在还没有关闭文件时文件里面什么都没有,,所以读不出东西
Scanner input = new Scanner(new File("temp.txt"));
System.out.println("ok");
System.out.println(input.nextLine());
input.close();
阅读(...) 评论()nextInt()读入的是仅是数字,而换行符没有读入,使用nextInt()的时候,读取一定是数值型的字符,然后就按换行符 接着使用nextLine(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。import java.util.S
public class sum {
* @param args
public static void main(String[] args) {
String s1;
Scanner s=new Scanner(System.in);
n=s.nextInt();
//s1=s.nextLine();加这句与不加的差别很大
//System.out.println(&n为:&+n);
for(int i=0;i&n;i++){
s1=s.nextLine();
s2[i]=getLineSum(s1);
for(int i=0;i&n;i++){
System.out.println(s2[i]);
public static int getLineSum(String strLine){
Scanner s=new Scanner(strLine);
int sum=0;
while(s.hasNextInt())
sum+=s.nextInt();
在标红色的地方如果没有加s1=s.nextLine();
加上以后的结果为
问题原因最开始已说明,对于这种简单的输入输出格式一定要注意
本文已收录于以下专栏:
相关文章推荐
学习Scanner类时遇到的一些小问题及解决方法
今天笔试又遇到输入问题,有时候这是个大问题,搞清楚!!!很重要,查了资料网上说的不全,不清楚,特总结。欢迎交流。
1.先总结,说说到底是啥!
next(),nextInt(),nextDouble()...
前言:借别人的例子做个总结。
原文出处:/gold-worker/archive//3013063.html
代码一 packag...
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的...
package cn.import java.util.Spublic class ScannerTest {
public static void main(Strin...
Java中最先学到的输入方法就是用Scanner类,方便好用,根本就不会想到会在输入上出问题,结果还真遇到了。
问题描述起来太啰嗦,直接看代码运行的结果。(代码借用遇到同样问题的一位朋友写的,稍有修改...
关于java中Scanner的用法,我就不再重复。在此说一下使用需要注意的事项
先看实例代码:
import java.util.S
public class Main
转自博客:/Skyar/p/5892825.html
nextInt(): it only reads the int ...
HPday02-java
1.通过控制台读取数据出现异常的问题:
通过控制台获取参数:
Scanner scanner =new Scanner(System.in);
Java Scanner next()和nextLine()的区别Scanner简单介绍:
Scanner的用途广泛,而且好用,它自身包含了很多构造方法,可以接收各种类型数据,可以是一个文件、输入...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【新问题】使用Scanner,nextLine()读取控制台的一行无故停止【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:655,968贴子:
【新问题】使用Scanner,nextLine()读取控制台的一行无故停止收藏
实现的是大数相加,算法自己编的,可能很丑,凑乎看吧,关键这个问题如何解决代码: import java.util.S public class Main1 {
*/ public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
n = scanner.nextInt();
System.out.println(n);
for(int i=0;i&n;i++){
int restle[] = new int[1000];
String as = scanner.nextLine();
String a = scanner.nextLine();
//★★★★★★读第二行在这里无故停止
String str[] = a.split(" ");
String A = str[0];
String B = str[1];
int ci = 0;
int di = 0;
if(A.length() &= B.length()){
m = A.length();
w = B.length();
int ii = 0;
for(int j=m-1;j&=0;j--){
char aa = A.charAt(j);
char bb = B.charAt(w-1);
int num1 = (int)aa - 48;
int num2 = (int)bb - 48;
System.out.println(num1+"+++++"+num2);
int num3 = num1 + num2 +
ci = num3/10;
di = num3%10;
restle[ii] =
for(int j=w-m-1;j&=0;j--){
if(ii == w-m-1){
char aa = B.charAt(j);
restle[ii] = (int)aa +
char aa = B.charAt(j);
restle[ii] = (int)
for(int f=ii-1;f&=0;f--){
System.out.print(restle[f]);
m = B.length();
w = A.length();
System.out.println("________");
} }测试数据:21 2211
2017java学习来上市公司博为峰学java,入学即签就业协议,不就业不收费,查看java课程!java好学吗?java课程来博为峰学,java工程师就业年薪十几万!
搞定了。。。输入少了一个回车。。。一个回车。。回车。。。车。。。。
登录百度帐号推荐应用Scanner类中的nextLine()产生的换行符问题
Scanner中,nextInt()不会读取或识别用户输入的和遗留的换行符,但是nextLine()会识别
本文章纯属原创,转载请注明作者,谢谢
System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());
System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());
在输入的过程中,nextInt()没有读取上一次输入nextInt()输入时留下的“\n”
但是nextLine()读取了上一次输入nextInt()留下的“\n”,所以没有给用户输入(软件认为用户输了一个”\n”),而是直接换行了。
请输入水果名称:apple
请输入水果价格:10
请输入水果数量:20
请输入水果描述:添加成功
修改方法:将nextLine()会读入但不需要的”\n”过滤掉。如下面的if操作:
System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());
/*此处的if判断作用为消除inpu.nexInt()语句遗留下来的"\n",inpu.nexInt()不会读取换行符,但是inpu.nextLine()会读取换行符,如果此处不处理,则在执行下面的input.nextLine()时会读取上一次输入时遗留的换行符,然后直接换行,不会读取用户的输入数据(或者说用户根本就无法输入数据)*/
if (input.nextLine() != "\n") {
System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());
运行结果:
请输入水果名称:apple
请输入水果价格:10
请输入水果数量:50
请输入水果描述:very well
当然用户也可以按照下列的方式进行过滤。(强迫症,不能忍,所以写了上面的那种方法,输出结果请自行调试)
System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());
input.nextLine();
-----------------
System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());
注意:有时nextLine()这行并不会报错,但是问题却是产生于这一行,使用过程中一定要小心。
建议:能不用时尽量不要使用nextLine(),尽量使用next()。
本文已收录于以下专栏:
相关文章推荐
**两个都是用来接收用户的输入,区别在于:
next()从遇到第一个有效字符(非空格、换行符)开始扫描,遇到第一个分隔符或结束符(空格’ ‘或者换行符 ‘\n’)时结束。 nextLine()则是...
参考/questions//for-loop-does-not-iterate-the-way-i-want
见以下代码:
我们知道下面的两种语句都可以输入字符串
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.nextL...
背景       本人最近在做华为机试练习题时,由于其输入用例为多行数据,因此混用了Scanner的next*()、next()、nextLine()。在使用过程中,发现了混用的一些问题,特此记录并分...
Java中最先学到的输入方法就是用Scanner类,方便好用,根本就不会想到会在输入上出问题,结果还真遇到了。
问题描述起来太啰嗦,直接看代码运行的结果。(代码借用遇到同样问题的一位朋友写的,稍有修改...
学习Scanner类时遇到的一些小问题及解决方法
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的...
package day_6_9;import java.util.Spublic class DataTypeDemo {
public static void main(Str...
在实现字符窗口的输入时,扫描器Scanner非常实用,操作起来也比较简单。在今天编程的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但是这两种...
Java Scanner next()和nextLine()的区别Scanner简单介绍:
Scanner的用途广泛,而且好用,它自身包含了很多构造方法,可以接收各种类型数据,可以是一个文件、输入...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 scanner.hasnext 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信