提问人:ruh01 提问时间:6/28/2022 最后编辑:ruh01 更新时间:7/5/2022 访问量:59
爪哇岛。扫描仪请求添加一行,但不打印
Java. Scanner requests an additional line but does not print it
问:
刚进入这个社区,这是我在这里的第一个问题,所以请耐心等待菜鸟。我创建了两个类,第一个是 Student,一个包含字段、构造函数和 getter 的基本类。第二个具有 main 方法、一个 LinkedList、一个多条目扫描程序 (for...) 和两个简单方法。 我的问题是,尽管 For 循环的最大索引为 1 (x = 0; x < 2),但扫描仪需要第三行输入和回车,但不打印第三行。我添加了两个类,也许我犯了一个错误,我将不胜感激。先谢谢你。
public class Student {
private String name;
private String surname;
private int firstMark;
private int secondMark;
private int finalExamMark;
public Student(String name, String surname, int firstMark, int secondMark, int finalExamMark) {
this.name = name;
this.surname = surname;
this.firstMark = firstMark;
this.secondMark = secondMark;
this.finalExamMark = finalExamMark;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public int getFirstMark() {
return firstMark;
}
public int getSecondMark() {
return secondMark;
}
public int getFinalExamMark() {
return finalExamMark;
}
@Override
public String toString (){
return this.name + " " + this.surname + " got " + this.firstMark + " at English, " + this.secondMark + " at Math and " + this.finalExamMark + " at the final exam.";
}
}
public class StudentMain {
static LinkedList<Student> courseAttend = new LinkedList<>();
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
addStudent();
printList(courseAttend);
}
private static void addStudent() {
for (int x = 0; x < 2; x++) {
String s1 = scanner.nextLine();
String[] split = s1.split("\\s");
courseAttend.add(new Student(split[0], split[1], Integer.parseInt(split[2]), Integer.parseInt(split[3]), Integer.parseInt(split[4])));
scanner.nextLine();
}
scanner.close();
}
private static void printList(LinkedList<Student> lista) {
for (Student elem : lista) {
System.out.println(elem);
}
}
}
例如,如果我输入(不带引号) “年轻的约翰 9 9 9” “Johnson Anne 8 8 8”,我按回车键,光标移动到下一行并等待另一个输入。只有在第三行和最后一次输入之后,才会显示消息,但不显示第三行。
答:
0赞
xthe_white_lionx
7/5/2022
#1
courseAttend 应该像你的方法论证一样,因为两者都可以是一个 ArrayList,如果它们不必分开,这是实现变量的正常方式,就像你的情况一样。
List<Student> courseAttend = new ...List<>();
printList(List<Student> students)
循环有两个 nextLine(),但您忽略了第二个,因此您正在创建一个学生并等待下一个输入,而不是保存输入
当用户必须为任何给定的提示输入多个参数时,您可能会有拼写错误。您的提示要求用户输入 5 个参数,并且它们甚至不是来自用空格分隔的单行上的同一类型。如果用户不小心给你一个无效的输入,比如一个整数作为名称或一个字符串作为标记,该怎么办?
public class StudentMain { static List<Student> courseAttend = new LinkedList<>(); static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { for (int x = 0; x < 2; x++) { courseAttend.add(createStudent()); } scanner.close(); printList(courseAttend); } private static Student createStudent(){ System.out.print("name: "); String name = scanner.nextLine(); System.out.print("surname: "); String surname = scanner.nextLine(); System.out.print("first mark: "); int firstMark = scanner.nextInt(); System.out.print("second mark: "); int secondMark = scanner.nextInt(); System.out.print("final exam mark: "); int finalExamMark = scanner.nextInt(); return new Student(name, surname, firstMark, secondMark ,finalExamMark); } private static void printList(List<Student> students) { for (Student elem : students) { System.out.println(elem); } } }
评论
0赞
ruh01
7/14/2022
然而,在循环的第一次迭代完成后,扫描仪会跳过名字并跳转到姓氏。它显示“name: surname: ”已连接,无法输入名称,只能在姓氏之后输入
0赞
ruh01
7/14/2022
解决方案是添加 scanner.nextLine();在 int finalExamMark = scanner.nextInt() 之后;
评论
scanner.nextLine();