【问题标题】:Make one extra variable, program doesn't work做一个额外的变量,程序不起作用
【发布时间】:2016-05-25 18:30:41
【问题描述】:

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


}

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

【问题讨论】:

  • 在第一次运行循环之后,您似乎 close 文件。
  • done = true; 更改为done = answer.equals("N");。此外,您可以使用!done 代替done == false。如果donefalse,请确保不要关闭PrintWriter
  • 恐怕还是不行@Titus
  • 还有@tobias_k,即使没有done = true,它也不起作用。
  • 尝试 new FileWriter("7D_mail.txt",true) 以追加到文件中。这里的布尔参数告诉您是否要追加到文件中。

标签: java string


【解决方案1】:

我认为它没有停止工作。在您接受用户的回复后,您无条件地将“完成”设置为 true,因此它退出。将“done = true”包装在检查“answer”值是否为“Y”的条件中。

【讨论】:

  • 没有区别。
【解决方案2】:

这是因为在循环的第一次迭代之后,值 'done' 被设置为 true,并且循环永远没有机会再次运行。

此外,您还会在一次迭代后关闭 PrintWriter。

我的建议是这样的改变:

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

【讨论】:

  • 这个答案是对他问题中的初始代码的回应。他似乎通过删除设置 done = true 值的行来稍微更改问题中的代码。
  • 我已经删除了那部分,因为它在那里没有任何区别,而且很多人建议改变它,这不是问题。
  • 你试过我的解决方案了吗?您不应该立即关闭 PrintWriter。这就是为什么即使循环进入第二次迭代,它也不会写入文件,因为您已经在第一次迭代中关闭了 PrintWriter。
【解决方案3】:

尝试使用 System.out.println();打印问题后避免异常(您可以在此处阅读 api https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine())。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多