编写小程序是遇到点小问题,编译通过,运行结果始终达不到自己想要的效果,下面是源程序:
import java.util.Scanner;
public class ScoreInput {
/*
*next()根nextLine()的区别:
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要录入的学生信息总个数:");
int sum = sc.nextInt();
Student[] s = new Student[sum];
for(int i = 0;i<s.length;i++){
s[i] = new Student();
}
int i = 0;
int all = 0;
while(i<s.length){
System.out.println("请输入学生姓名:");
s[i].setName(sc.nextLine()); //next()和nextLine()的区别
System.out.println("请输入学生年龄:");
s[i].setAge(sc.nextInt());
System.out.println("请输入学生成绩:");
s[i].setScore(sc.nextInt());
System.out.println(s[i]);
all += s[i].getScore();
i++;
}
System.out.println("学生的平均成绩为:"+(all/sum));
}
}
该程序的作用比较简单,通过键盘录入学生的信息包括姓名,年龄,成绩,最后根据总分数跟人数计算录入成绩的平均分
设想的结果很好,结果中途出现问题:
到该输入学生姓名的时候自动跳过,提示输入学生年龄
最后通过查找资料,了解到nextLine()和next()的特性:
nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串**的
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。
鉴于以上两种方法的区别,在编程时一定要注意next()方法和nextLine()方法的连用
以上代码bug可以通过下面两种方式解决
第一种:
import java.util.Scanner;
public class ScoreInput {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要录入的学生信息总个数:");
int sum = sc.nextInt();
Student[] s = new Student[sum];
for(int i = 0;i<s.length;i++){
s[i] = new Student();
}
int i = 0;
int all = 0;
while(i<s.length){
sc.nextLine(); //在此位置追加一个nextLine()的语句
System.out.println("请输入学生姓名:");
s[i].setName(sc.nextLine()); //next()和nextLine()的区别
System.out.println("请输入学生年龄:");
s[i].setAge(sc.nextInt());
System.out.println("请输入学生成绩:");
s[i].setScore(sc.nextInt());
System.out.println(s[i]);
all += s[i].getScore();
i++;
}
System.out.println("学生的平均成绩为:"+(all/sum));
}
}
第二种:
import java.util.Scanner;
public class ScoreInput {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要录入的学生信息总个数:");
int sum = sc.nextInt();
Student[] s = new Student[sum];
for(int i = 0;i<s.length;i++){
s[i] = new Student();
}
int i = 0;
int all = 0;
while(i<s.length){
System.out.println("请输入学生姓名:");
s[i].setName(sc.next()); //直接在此处换为next()语句接收
System.out.println("请输入学生年龄:");
s[i].setAge(sc.nextInt());
System.out.println("请输入学生成绩:");
s[i].setScore(sc.nextInt());
System.out.println(s[i]);
all += s[i].getScore();
i++;
}
System.out.println("学生的平均成绩为:"+(all/sum));
}
}
以后这些小的方法的细节还是需要斟酌使用
参考链接 点击打开链接: