我的任务是创建一个程序,要求用户输入年份,名字和姓氏。然后它获取当年的最后2个数字,整个姓氏以及名字的第一个字母,并将它们格式化为如下的电子邮件:16SmithJ@mymail.co.uk。它将此电子邮件放在一个不需要打印的文本文件中。最后,它询问用户是否希望再次重复该过程以发送新电子邮件。
这是我的程序,但还没有完全完成。我有它工作,但当我去实现重复它的部分,如果需要,电子邮件不再在文件中:
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();
}
}
上面的程序有效,但是如果我在最后一个之后添加一行( String answer = 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 :(得分:1)
我不认为它停止了工作。你无条件地设置"完成"在您接受用户的回复后,为真,它就会退出。 Wrap" done = true"在检查"回答"的值的条件下是" Y"。
答案 1 :(得分:1)
这是因为价值已经完成了#39;在循环的第一次迭代后设置为true,循环永远不会再次运行。
此外,您也会在一次迭代后关闭PrintWriter。
我建议的是这种改变:
if(answer.equals("N")){
done = true;
pw.close();
}
答案 2 :(得分:-1)
尝试使用System.out.println();打印问题后避免异常(你可以在这里阅读api https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine())。