欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java:nextInt()和nextLine()一起使用出错

程序员文章站 2023-01-13 22:47:17
今天遇到一个很奇怪的事情,日常刷题中,遇到一个很简单的题: (不想看我多逼逼只想知道为什么会出错看最后) 题目: 题目描述 description 题目描述 description 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编 ......

今天遇到一个很奇怪的事情,日常刷题中,遇到一个很简单的题:

(不想看我多逼逼只想知道为什么会出错看最后)

题目:

现有有n个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取n条记录输入,再按要求输出。 n<100

java:nextInt()和nextLine()一起使用出错

java:nextInt()和nextLine()一起使用出错

遇到这个题,对于用c语言的同学,构建结构体,加以顺序表,输入格式也有scanf函数控制轻松解决。

但是用java来做,就需要考虑,先将这一行数据转化为独立的数据,由于java里面没有类似scanf(“%d:::::%d”,&n,&m)这样格式输入的函数。

先将一行数据转化为可以识别的单个数据:

 1 import java.util.scanner;
 2 
 3 public class test {
 4     public static void main(string[] args) {
 5         scanner sc = new scanner(system.in);
 6         string s = sc.nextline();
 7         string ss[] = s.split(" ");
 8         for (string x : ss) {
 9             system.out.println(x);
10         }
11     }
12 }

然后我发现这样连着使用in.nextint()和in.nextline()(和in.next()使用未发现问题

会出现以下情况:

java:nextInt()和nextLine()一起使用出错

这时我才发现第13行代码没有发生作用(如果是这样输入:1  a100 zhblue 70 80 90 在一行输入情况又会正常

 java:nextInt()和nextLine()一起使用出错

然后我百度发现:

跳到这个位置:

     问题分析:nextline()会把nextint(),next(),nextdouble(),nextfloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextline便已经转向了下一条语句执行。

      解决办法 : 在每一个nextint(),next(),nextdouble(),nextfloat()后都加一个nextline()语句,将被next()去掉的enter过滤掉。

比如图下(在第10行添加了一句in.innextline();

java:nextInt()和nextLine()一起使用出错

 

这道题的源码:

 1 import java.util.arraylist;
 2 import java.util.scanner;
 3 
 4 public class main {
 5     public static void main(string[] args) {
 6         scanner in = new scanner(system.in);
 7         int n=in.nextint();
 8         in.nextline();
 9         arraylist<a> p=new arraylist<a>();
10         for (int i=0;i<n;i++){
11             string pdd=in.nextline();
12             string ss[]=pdd.split(" ");
13             a temp=new a(ss[0],ss[1],ss[2],ss[3],ss[4]);
14             p.add(temp);
15         }
16         for(a d:p){
17             system.out.println(d.n+","+d.name+","+d.a1+","+d.a2+","+d.a3);
18         }
19     }
20     static class a{
21         public a(string n, string name, string a1, string a2, string a3) {
22             this.n = n;
23             this.name = name;
24             this.a1 = a1;
25             this.a2 = a2;
26             this.a3 = a3;
27         }
28         string n;
29         string name;
30         string a1;
31         string a2;
32         string a3;
33     }
34 
35 }

但是还有一事:为什么java中不弄一个格式化输入,就像c中scanf(“%d:::::%d”,&n,&m)这样,就不需要将一行数据转成string数组了,希望有大佬能给我解答,或者有更好的办法欢迎讨论。