2016-05-25 23 views
0

我的任務是創建一個程序,要求用戶輸入一年,一個名字和一個姓氏。然後,它採用年份的最後兩個數字,整個姓氏和名字的第一個字母,並將它們格式化爲如下所示的電子郵件:[email protected]。它將這封電子郵件放在一個文本文件中,不需要打印。最後,它詢問用戶是否希望再次重複該過程以製作新的電子郵件。做一個額外的變量,程序不起作用

這是我的程序,它還不完整。我有工作,但是當我去實現它重複它,如果想要的部分,電子郵件不再是文件中提出:

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(); 
    } 


} 

這個方案上面的作品,但如果我那麼以後添加一行最後一個(字符串答案= kb.nextLine();),爲答案製作一個新的字符串,它不再起作用。

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(); 
    } 


} 

任何想法,爲什麼這是行不通的?謝謝

+0

看起來好像你在循環的第一次運行後'關閉'文件。 –

+0

將'done = true;'改爲'done = answer.equals(「N」);'。另外,您可以使用'!done'而不是'done == false'。如果'done'爲'false',確保你不關閉'PrintWriter'。 – Titus

+0

仍然不起作用恐怕@Titus – JoeMaynard

回答

1

我不認爲它停止工作。在您接受用戶的repsonse後,您無條件地將「完成」設置爲true,因此退出。在檢查「答案」的值爲「Y」的情況下,將「完成=真」包裹起來。

+0

沒有區別。 – JoeMaynard

1

這是因爲在循環的第一次迭代之後,值'done'被設置爲true,並且循環從未有機會再次運行。

此外,您也可以在一次迭代後關閉PrintWriter。

我的建議是這樣的變化:

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

這個答案是迴應他的問題中的初始代碼。他似乎通過刪除設置done = true值的行來改變了問題中的代碼。 – sosale151

+0

我已經刪除了該部分,因爲它在那裏沒有任何區別,許多人都建議更改它,這不是問題。 – JoeMaynard

+0

你試過我的解決方案嗎?您不應該馬上關閉PrintWriter。這就是爲什麼即使循環進入第二次迭代,它也不會寫入文件,因爲您在第一次迭代中關閉了PrintWriter。 – sosale151