2016-05-25 10 views
0

Meine Aufgabe ist es, ein Programm zu erstellen, das den Benutzer auffordert, ein Jahr, einen Vornamen und einen Nachnamen einzugeben. Es nimmt dann die letzten 2 Zahlen des Jahres, den ganzen letzten Namen und den ersten Buchstaben des Vornamens und formatiert sie in eine E-Mail wie folgt: [email protected] Diese E-Mail wird in eine Textdatei geschrieben, die nicht gedruckt werden muss. Am Ende wird gefragt, ob der Benutzer den Vorgang wiederholen möchte, um eine neue E-Mail zu erstellen.Eine zusätzliche Variable machen, Programm funktioniert nicht

Dies ist mein Programm, und es ist noch nicht vollständig abgeschlossen. Ich habe es funktioniert, aber wenn ich das Teil zu implementieren, die es wiederholt, wenn gewünscht, wird die E-Mail nicht mehr in der Datei vorgenommen:

public static void main(String[] args) throws IOException { 
    PrintWriter pw = new PrintWriter (new FileWriter("7D_mail.txt")); 
    boolean done = false; 
    while (done==false){ 
    Scanner kb = new Scanner (System.in); 
    System.out.print ("Enter the year (e.g 2016) > "); 
    String year = kb.nextLine(); 
    System.out.print ("Enter your first name > "); 
    String fname = kb.nextLine(); 
    System.out.print ("Enter your last name > "); 
    String lname = kb.nextLine(); 
    pw.write (year.substring(2)+lname+fname.charAt(0)+"@mymail.co.uk"); 
    System.out.print ("*** Email created - another one? (Y/N)"); 

    pw.close(); 
    } 


} 

Dieses Programm oben funktioniert, aber wenn ich dann eine Zeile nach dem hinzufügen Letzte (String antwort = kb.nextLine();), um eine neue Zeichenfolge für die Antwort zu machen, funktioniert es nicht mehr.

public static void main(String[] args) throws IOException { 
    PrintWriter pw = new PrintWriter (new FileWriter("7D_mail.txt")); 
    boolean done = false; 
    while (done==false){ 
    Scanner kb = new Scanner (System.in); 
    System.out.print ("Enter the year (e.g 2016) > "); 
    String year = kb.nextLine(); 
    System.out.print ("Enter your first name > "); 
    String fname = kb.nextLine(); 
    System.out.print ("Enter your last name > "); 
    String lname = kb.nextLine(); 
    pw.write (year.substring(2)+lname+fname.charAt(0)+"@mymail.co.uk"); 
    System.out.print ("*** Email created - another one? (Y/N)"); 
    String answer = kb.nextLine(); 

    pw.close(); 
    } 


} 

Eine Idee, warum das nicht funktioniert? Danke

+0

Es scheint, als ob Sie die Datei nach dem allerersten Durchlauf der Schleife "schließen". –

+0

Ändern Sie 'done = true;' zu 'done = answer.equals (" N ");'. Sie können auch '! Done' anstelle von' done == false' verwenden. Stellen Sie sicher, dass Sie den 'PrintWriter 'nicht schließen, wenn' done' 'false' ist. – Titus

+0

Funktioniert immer noch nicht Ich habe Angst @Titus – JoeMaynard

Antwort

1

Ich glaube nicht, dass es nicht mehr funktioniert. Sie setzen "done" unbedingt auf "true", nachdem Sie die Antwort des Benutzers genommen haben, sodass es beendet wird. Wrap "done = true" in einer Bedingung, die für den Wert von "Antwort" auf "Y" überprüft.

+0

Macht keinen Unterschied. – JoeMaynard

1

Dies liegt daran, dass der Wert 'done' nach der ersten Iteration der Schleife auf 'True' gesetzt ist und die Schleife nie wieder ausgeführt werden kann.

Außerdem schließen Sie den PrintWriter auch nach einer Iteration.

Was würde ich vorschlagen, ist diese Änderung:

if(answer.equals("N")){ 
    done = true; 
    pw.close(); 
} 
+0

Diese Antwort war eine Antwort auf den ursprünglichen Code in seiner Frage. Er scheint den Code in der Frage etwas geändert zu haben, indem er die Zeile entfernt hat, die den Wert von done = true setzt. – sosale151

+0

Ich habe diesen Teil entfernt, weil es dort keinen Unterschied machte und viele Leute vorschlagen, es zu ändern, was nicht das Problem ist. – JoeMaynard

+0

Haben Sie meine Lösung versucht? Sie sollten den PrintWriter nicht sofort schließen. Aus diesem Grund schreibt die Schleife nicht in die Datei, obwohl die Schleife in die zweite Iteration eintritt, da Sie den PrintWriter in der ersten Iteration geschlossen haben. – sosale151

Verwandte Themen