黑马程序员技术交流社区

标题: nextInt() 录入整数再使用 nextLine()录入字符出现的问题。 [打印本页]

作者: yangxiong    时间: 2016-3-28 23:00
标题: nextInt() 录入整数再使用 nextLine()录入字符出现的问题。
为什么?怎么解决。

作者: 犹豫的烤肉拌饭    时间: 2016-3-28 23:09
nextInt()接收到回城的时候自动认为结束了..
作者: 马儿不吃草    时间: 2016-3-28 23:22
当通过nextInt()录入一个整数的时候,其实录入的是整数和\r\n,因为在录完整数后会敲击回车键,\r\n就代表的回车键,而nextLine遇到\r\n就会录入结束,所以会出现问题
作者: sy1205    时间: 2016-3-28 23:37
nextInt()录入整数时会再其后跟上\r \n,而nextLine()恰好是一这两个字符作为结束标志的,所以你会发现什么都没录进去,解决办法,你可以把整数当做字符串来存,当你要使用的时候的,再将字符串转换成整数就可以了,有这个函数。
作者: Gqg    时间: 2016-3-28 23:52
两种方法的:1.再添加一个键盘输入,2.你可以把整数当做字符串来存,当你要使用的时候的,再将字符串转换成整数就可以了
作者: 却又像风    时间: 2016-3-29 00:59
把nextLine()改成next()就可以了,或者重新new一个对象
作者: Ak-47    时间: 2016-3-29 01:30
nextIne()是键盘录入整数的方法,当我们录入一个整数的 的时候,其实在键盘在录入的是这个数字和\r\n,
               
,nextLine()是键盘录入字符串的方法,可以接受任意类型的数据,但是他凭什么能获取
                一行呢?通过\r\n,只要碰到\r\n就结束了
所以当你前面输入整数,下面紧跟着输入字符时,当你输入一个整数后,系统默认后面加上了\r\n,这个\r\n,被nextLine()接收就代表结束了,所以控制台就显示你输入的整数,下面就是空格了,撒都没有
作者: 小明1    时间: 2016-3-29 15:36
你是想用nextInt输入数字,然后用nextLine得到一段字符串吗?
你可以这样:
package practics;
import java.util.Scanner;
public class aa {
        public static void main(String []args){
        Scanner sc=new Scanner(System.in);
        String b=sc.nextLine();
   int s=sc.nextInt();
   System.out.println(s+"  "+b);
}}
这样就好你试试 因为在nextInt之后有个换行,被nextLine();所接受所以就没有输出值。
作者: ping3014    时间: 2016-3-29 18:47
统一都用nextline()好了,字符串  数字值通吃
作者: 1053275154    时间: 2016-3-29 21:08
你好!
nextInt()是键盘录入整数的方法,当我们录入10的时候,其实是在键盘上录入的是10和\r\n(敲的回车键),nextInt()方法只获取10就结束了. nextLine()是键盘录入字符串的方法,可以接收任意类型,只要遇到\r\n就证明一行结束了.
解决方案1, 创建两次对象(但是浪费空间)

解决方案2
键盘录入的都是字符串,都用nextLine方法.然后在转换.


作者: Max灬xu    时间: 2016-3-29 22:04
原因:nextInt() 录入整数,输完后会有一个回车换行,整数被前面的用了,剩个回车换行,nextLine()直接接收到回车换行就会认为已经输完,得到的是一个空字符串;
解决方法:1 用next代替nextline,因为next会无视真正字符串前面的tab 空格  和回车,  比如“空格+回车+123”空格和回车不会起到效果。
2:重新NEW一个输入
作者: 123liu123    时间: 2016-3-29 22:24
本帖最后由 123liu123 于 2016-3-29 22:25 编辑

nextInt()录入的后边有一个\r\n,而int只接收了数字,留下了\r\n,而nextline遇到\r\n会结束

作者: aomingchao    时间: 2016-3-30 00:39
不明白你想问什么?
作者: 小灰辉    时间: 2016-3-30 13:57
键盘录入 使用前必须导包;
如果 你想通过键盘录入一个整数 那么调用nextInt() 方法,该方法返回值是int类型的数据.
如果 你想通过键盘录入一串字符串,那么调用的是nextLine()方法,该方法返回值是 String类型的数据
作者: 武震震    时间: 2016-3-30 18:15
这是因为遇到/r/n你说你不懂的地方我给你解决- -
作者: 小凡帅哥    时间: 2016-3-30 21:32
因为nextInt只截取windows系统的\r\n之前的数据,剩下的\r\n就被nextLine截取了,就出现空的获取了
作者: lavenderlmm    时间: 2016-3-30 22:57
nextInt()输入后其实还会包含回车和换行两个字符,刚好被nextLine()接收,而nextLine()的结束标志就是回车换行
作者: 菇凉斋    时间: 2016-3-31 00:04
因为在Scanner类中,用nextInt()获取到数据,底层会直接默认在后面加\r\n,而nextLine()遇到\r\n,就会自动结束,不会在调用了..希望可以帮到你..
作者: wxf468907066    时间: 2016-3-31 17:16
你输入的整数被nextInt()接收到了,然后你所按的回车也就是"\r\n"被nextLine()接收了,而nextline判断一行的标志就是\r\n,所以就只有整数了.这样的话就是需要一次键盘录入,就创建一个nextxxx(),妈妈再也不用担心出问题了
作者: lmr1096200234    时间: 2016-3-31 18:58
如果先使用nextInt方法来读取一个整数,再用nextLine方法来读取字符串,会发生这样一种情况:nextLine方法不等待我们键盘录入,就运行完了。
发生这种问题的原因在于:在开始输入整数时,一按下回车键,nextInt就读取了整数,但是回车中的换行符,紧接着被nextLine方法读取了,所以nextLine实际上读到了换行符号,并没等待我们键盘录入
作者: yangxiong    时间: 2016-3-31 19:45
..........................................
作者: 122754304    时间: 2016-4-1 23:23
录入的时候是根据回车来确定是否录入完毕,当你输入nextInt()的值回车是nextLint()同时捕捉到了回车,解决方法有两种:第一种,重新创建一个Scanner对象来接收录入的nextLine()的值.第二种方法:统一用nextLine()来录入一个整数类型字符串,然后Integer来将整数字符串转成int类型
作者: 怎么能够    时间: 2016-4-2 22:18
  
作者: adomwon    时间: 2016-4-3 09:04
统一用nextLine()吧,nextInt()也就是在学习的前期用用,后面基本不用的
作者: zw2008    时间: 2016-4-3 18:53
创建两个Scanner对象,一个接受整数,一个接受字符串
作者: 雨伞    时间: 2016-4-4 12:02
因为我们在输入1后,会按换行键,所以实际上录入的是1和\r\n , 所以sc.nextLine()是录入字符串的方法,遇到\r\n 就结束了
作者: Max灬xu    时间: 2016-4-4 12:39
亲,我刚写了一篇关于这个的帖子,愿意及解决方案可以看一下,简单的有四种解决方法,你如果有其他方法可以给我留言额
作者: yangxiong    时间: 2016-4-4 22:33
每周答题在哪里啊?还有怎么快速获得25技术分啊
作者: 改变自己、    时间: 2016-4-11 23:55
Scanner nsc = new Scanner(System.in);  用来录入整数
int number = nsc.nextInt();
Scanner csc = new Scanner(System.in);  用来录入字符串
String str = csc.nextLine();
作者: 小K哥    时间: 2016-4-17 15:37
主要原因:就是那个换行符号的问题。因为你先输入了一个整数,然后按了回车,而回车其实是\n,所以它把\n赋给了它,而\n为null,所以你看不见。
怎么解决:
方法一:先获取一个数值后,再创建一个新的键盘录入对象获取字符串。
方法二:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
作者: 向前爬的虫子    时间: 2016-4-17 18:30
真是高手在民间,应该好好向你们学习!!!
作者: Amor~    时间: 2016-4-19 20:20
录入整数后按回车键  系统默认的\r\n使得录入字符时结束了   解答:全部录入字符,后面在转成你需要的整数
作者: liudh1    时间: 2016-4-19 22:00
只能分开使用,nextInt()已经获取数据,后面的就无法获取了
作者: yuzhiliang    时间: 2016-4-21 22:25
方法1:直接键盘输入
作者: yuzhiliang    时间: 2016-4-21 22:26
方法1 键盘输入
方法2 转换成toString类型
作者: Erry    时间: 2016-4-23 22:06
其实吧,现阶段你只要记住他们分开用就好了!别混合用
作者: 张狮子    时间: 2016-4-26 22:43
nextLine读到了换行符号,就运行结束啦
作者: 钱金磊    时间: 2016-4-29 00:23
Java中nextLine()自动读取了被nextInt()去掉的Enter作为他的结束符,所以没办法给nextInt(从键盘输入值。经本人验证,其他的nextXxx()的方法,如:nextDouble(), nextFloat() nextInt() 等与nextLine()连用时都存在这个问题!!!
解决的办法是:在每一nextDouble()、nextFloat()、nextInt()等语句之后加一个nextLine()语句!
将被next()去掉的Enter结束符过滤掉
方法如下:

  1. <div style="text-align: justify;"><font color="#333333" face="宋体" size="2"><span style="line-height: 28px;"><b>Scanner sc=new Scannsr(System.in);</b></span></font></div><div style="text-align: justify;"><font color="#333333" face="宋体" size="2"><span style="line-height: 28px;"><b>System.out.println("请输入一个数");</b></span></font></div><div style="text-align: justify;"><font color="#333333" face="宋体" size="2"><span style="line-height: 28px;"><b>int i=</b></span></font><b style="color: rgb(51, 51, 51); font-family: 宋体; font-size: small; line-height: 28px;">nextInt();</b></div><div style="text-align: justify;"><font color="#333333" face="宋体" size="2"><span style="line-height: 28px;"><b>sc.nextLine();</b></span></font></div><div style="text-align: justify;"><b style="color: rgb(51, 51, 51); font-family: 宋体; font-size: small; line-height: 28px;">System.out.println("请输入一个字符串");</b></div><div style="text-align: justify;"><b style="color: rgb(51, 51, 51); font-family: 宋体; font-size: small; line-height: 28px;">String s=sc.nextLine();</b></div><div style="text-align: justify;"><b style="color: rgb(51, 51, 51); font-family: 宋体; font-size: small; line-height: 28px;">......</b></div><div style="text-align: justify;"></div>
复制代码




作者: 年年    时间: 2016-4-29 12:47
自带回车键`代表结束
作者: taoshan    时间: 2016-5-6 09:11
nextline()默认是以\r\n结束,在录入字符串的时候,回车一下,是的只能nextint(),有值,但是nextline就没有值
作者: ypenghui    时间: 2016-5-13 20:46
我今天刚好发了碰到了一个类似的例子,针对这个我发了一个相关的贴子,现在举个例子回复你把:
  1. import java.util.Scanner;
  2. public class Score {
  3.         public static void main(String[] args) {
  4.                 int[][] score = new int[3][3];
  5.                 int i, j, k = 0;
  6.                 String[] subject = { "语文", "数学", "英语" };
  7.                 String[] name = new String[3];
  8.                 Scanner scan = new Scanner(System.in);
  9.                 for (i = 0; i < 3; i++) {
  10.                         System.out.println("请输入第" + (i + 1) + "个宝宝的名字");
  11.                         name[i] = scan.nextLine();
  12.                         for (j = 0; j < 3; j++) {
  13.                                 System.out.println("请输入" + name[i] + "的" + subject[j] + "成绩");
  14. /*这里我们若用下面第一语句,nextInt()录入一个整数的时候,其实录入的是整数和\r\n,因为在录完整数后会敲击回车键,\r\n就代表的回车键,而nextLine遇到\r\n就会录入结束*/
  15. //score[i][j] = scan.nextInt();
  16. //我们用下面语句就解决了问题
  17.                                 score[i][j] = Integer.parseInt(scan.nextLine());
  18.                         }
  19.                 }
  20.                 System.out.println(name[0] + name[1] + name[2]);
  21.         }
  22. }
复制代码
希望对你有帮助,不懂可以给我留言



作者: linguoqun    时间: 2016-7-26 02:06
楼主,您好!很高兴回答您的问题!
根据您提出的问题,给出以下回答:
楼主遇到的问题是,输入第一个数完毕之后,系统不等待我们输入第二个字符,直接跳过第二个输入步骤,结果输出,对吧?
解决办法其实很简单,楼主可以试一下,将nextLine()改成  next(),其他不变,试试。本人试过,成功的哦。
原代码如下:
import java.util.Scanner;

public class Test04 {

        public static void main(String[] args) {
                String ch;
                int input=0;
                System.out.println("请输入一个整型数:");
                Scanner sc=new Scanner(System.in);
                input=sc.nextInt();
                System.out.println("请输入一个字符:");
                ch=sc.next();
                System.out.printf("您输入的整数是%d\n",input);
                System.out.printf("您输入的字符是%s",ch);
        }

}
原理很简单:
当我们需要输入一个数的时候,输完数字之后我们按回车结束我们的输入。这时其实我们是输入了两个数据,一个是我们输入的数据,另一个是字符"\n"代表回车。
楼主有没有了解过缓存区的原理?现在我们首先要了解系统输入的一个原理,就是我们输入完毕之后,系统是不是直接将我们输入的数据直接赋值给变量呢?答案是,不是的。
这里要提出一个概念,叫做缓存区。当我们输入数据一个数据,再按一个回车,结束我们的输入的时候,缓存区其实接收到了两个数据,一个我们输入的数据,一个就是我们输入的回车。
系统会先检查缓存区有没有数据,如果没有,把我们输入的这两个存储到缓存区,再从缓存区拿出来,依次赋给需要赋值的变量,如果缓存区没有数据,则会等待我们的输入,如果已经存在数据,则会跳过我们的输入,将缓存区紧接着的数据赋值给我们的下一个变量。所以才会产生您所说的这种情况。
纯手打的,满意请采纳,谢谢!
作者: cjc147    时间: 2016-9-9 01:17
用户在录入的时候输入了一个整数就敲击了回车键。那么整数被nextInt接收了,整数后面是一个回车换行符,敲好nextLine的判断规则是遇到回车换行符就结束。因此当nextInt录入整数后用用nextLine录入字符串的时候只录入了整数,而字符串录入的是空串。解决方案是,全部用nextLine录入,然后对第一个录入的数据用Integer.parseInt()方法转换成整数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2