制作一个额外的变量,程序不起作用

时间:2016-05-25 18:30:42

标签: java string

我的任务是创建一个程序,要求用户输入年份,名字和姓氏。然后它获取当年的最后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();
    }


}

知道为什么这不起作用?感谢

3 个答案:

答案 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())。