Ich versuche, ein Java-Programm zu schreiben, in dem der Benutzer angibt, wie viele "Studenten Aufzeichnungen" sie möchten, gefolgt von dem Namen des Schülers, Alter und GPA eingeben wird dann als Text gespeichert. Jedoch habe ich ein Problem mit meinem Text, der nicht alle eingegebenen Daten und eine mysteriöse neue Zeile enthält, die ich nicht loswerden kann. Hier ist mein Programm:FileWriter nicht alle Eingabe und mysteriöse baumelnde Newline Ausgabe
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);
}
}
Hier wird die Probe Eingangs- und Ausgangs meine Probleme zu veranschaulichen:
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
Warum es den Vornamen nicht speichern eingegeben? Warum gibt es im ersten Eintrag keine neue Zeile, aber in den anderen?
for (int x = 1; x <= hm; x++)
{
System.out.print("Enter Name: ");
name = input.next();
input.nextLine();
System.out.print("Enter Age: ");
age = input.nextInt();
input.nextLine();
System.out.print("Enter GPA: ");
gpa = input.nextDouble();
next = input.nextLine();
StudentFile.println(name);
StudentFile.println(age);
StudentFile.println(gpa);
}
Einige Dinge, die Sie betrachten wünschen können:
Thank you! Würdest du mir bitte erklären, warum das funktioniert und warum meins nicht? Warum verwenden Sie name = input.next(); anstelle von input.nextLine() ;? –
Mit 'nextLine()' nach dem "Enter Name:" ging es zweimal zur nächsten Zeile. Aber eigentlich möchten Sie nur die nächste Zeichenfolge haben, deshalb müssen Sie 'next()' aufrufen. Danach können Sie jede weitere Eingabe überspringen und in die nächste Zeile fortfahren, die ganze Zahl lesen und so weiter. –
@MarkusL Sie sollten den 'Scanner' nicht schließen, da er auch 'System.in' schließt, was ** Sie ** nicht zugewiesen hat, sondern die JVM. Sie sollten stattdessen eine '@SuppressWarnings (" Ressource ")' hinzufügen. Ich habe diesen Fehler auch gemacht, weil der Java-Compiler Sie warnt, aber nicht wie erwähnt auf den 'Scanner'. – thatguy