Я пытаюсь написать программу Java, в которой пользователь указывает, сколько «студенческих записей» они хотели бы ввести, а затем имя студента, возраст и GPA, которые затем сохраняется в виде текста. Тем не менее, у меня возникла проблема с моим текстом, который не включает все введенные данные и таинственную висячую новую строку, от которой я не могу избавиться. Вот моя программа:FileWriter не получает всю входную и загадочную болтовню с выпуском новой строки
import java.io.*;
import java.util.Scanner;
public class CreateFile {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
FileWriter fwriter = new FileWriter("c:\\Students.dat");
PrintWriter StudentFile = new PrintWriter(fwriter);
String name = " ";
String next = " ";
int age = 0;
int hm = 0;
double gpa = 0.0;
System.out.print("How many student records would you like to enter: ");
hm = input.nextInt();
for (int x = 1; x <= hm; x++) {
System.out.print("Enter Name: ");
name = input.nextLine();
input.nextLine();
System.out.print("Enter Age: ");
age = input.nextInt();
System.out.print("Enter GPA: ");
gpa = input.nextDouble();
next = input.nextLine();
StudentFile.println(name);
StudentFile.println(age);
StudentFile.println(gpa);
}
StudentFile.close();
System.exit(0);
}
}
Здесь образец ввод и вывод, чтобы проиллюстрировать мои вопросы:
run:
How many student records would you like to enter: 3
Enter Name: Jon
Enter Age: 20
Enter GPA: 3.4
Enter Name: Bill
Enter Age: 24
Enter GPA: 3.6
Enter Name: Ted
Enter Age: 34
Enter GPA: 3.9
This is the produced text file:
20
3.4
Bill
24
3.6
Ted
34
3.9
Почему не хранить имя вошло? Почему в первой записи нет новой строки, но она есть в других?
Спасибо! Не могли бы вы объяснить, почему это работает и почему у меня нет? Зачем использовать name = input.next(); вместо input.nextLine() ;? –
С 'nextLine()' после вашего «Enter Name:» вы дважды переходите к следующей строке. Но на самом деле вы хотите иметь только следующую строку, поэтому вам нужно вызвать 'next()'. После этого вы можете пропустить любой дополнительный вход вперед до следующей строки, прочитать целое число и так далее. –
@MarkusL Вы не должны закрывать «Сканер», так как он также закрывает 'System.in', который ** вы ** не выделили, а JVM. Вы должны добавить '@SuppressWarnings (" resource ")'. Я тоже ошибся, потому что компилятор Java дает вам предупреждение, но это не относится к «Сканеру», как упоминалось. – thatguy