gpt4 book ai didi

java - Sentinel 无法在 Java while 循环中工作;和 printwriter 不写入文本文件

转载 作者:行者123 更新时间:2023-12-01 08:55:02 24 4
gpt4 key购买 nike

package addlinenumbers;

import java.util.Scanner;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class AddLineNumbers {

public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String sentinel = new String();
int i=0;
try
{
FileOutputStream fos = new FileOutputStream
("dataInput.txt", true); //true means we will be appending to dataInput.txt

PrintWriter pw = new PrintWriter (fos);

//write data to the file
while(!(sentinel.equals("-1")))
{
System.out.println("Please enter strings to prepend to 'dataInput.txt'; -1 to EXIT: ");
pw.print(input.nextLine());
i++;
}
}

catch (FileNotFoundException fnfe)
{
System.out.println("Unable to find dataInput.txt...");
}
catch (IOException ioe)
{
ioe.printStackTrace(System.out);
}
finally
{
System.out.println("# of objects: " + i);
System.out.println("Closing file...");
input.close();
}
}
}

目前,我的输出将无休止地要求我将字符串输入到“dataInput.txt”(位于相应的项目文件夹中),但它不会使用 Java 字符串的正确标记从 while 循环中退出。我在这里错过了什么吗?我没有使用==。 “-1”除了再次循环之外什么也不做。 应该退出,以前置方式将输入写入文本文件,然后关闭文件。

还有!事实证明,没有从 while 循环输入中获取任何内容并传输到“dataInput.txt”文件。我不知道为什么。

任何帮助将不胜感激!

编辑:仅供引用,我必须使用带有哨兵的 while 循环。再次感谢所有正在/已经/将在这个问题上帮助我的人。

编辑 #2:考虑到 MadProgrammer 的出色建议,我的输出中留下了一个小问题:

run:
Please enter strings to prepend to 'dataInput.txt'; -1 to EXIT:
David
Goliath
Please enter strings to prepend to 'dataInput.txt'; -1 to EXIT:
Delilah
Samson
Please enter strings to prepend to 'dataInput.txt'; -1 to EXIT:
-1
# of objects prepended: 2
Closing file...
BUILD SUCCESSFUL (total time: 18 seconds)

正如您所看到的,它只接受两个对象:“Goliath”和“Samson”,并且它们是写入文本文件的唯一字符串。从技术上讲,它应该有 4 个对象,“David”和“Delilah”也应该位于文本文件中,但事实并非如此。

任何帮助将不胜感激。

最佳答案

while(!(sentinel.equals("-1"))) 永远不可能是 false (对于循环条件),因为 sentinel code> 永远不会改变,它始终是 ""

从概念上讲,您需要读取用户输入并决定如何处理它,然后使用该值来确定是否需要退出循环

所以,这是一个“非常快速”的示例(未经测试),说明您可以做什么......

Scanner input = new Scanner(System.in);
int i = 0;
try (FileOutputStream fos = new FileOutputStream("dataInput.txt", true)) {
try (PrintWriter pw = new PrintWriter(fos)) {
String userInput = "";
do {
userInput = input.nextLine();
if (!userInput.equals("-1")) {
pw.print(input.nextLine());
i++;
}
} while (!userInput.equals("-1"));
}
} catch (FileNotFoundException fnfe) {
System.out.println("Unable to find dataInput.txt...");
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
} finally {
System.out.println("# of objects: " + i);
}

仅供引用:input.close(); 不是关闭"file",而是关闭标准输入,这从来都不是一个好主意

注意:复合 try-with block 太过分了,您可以使用单个语句将其全部包裹起来,但我想围绕类似的代码结构演示这个概念

关于java - Sentinel 无法在 Java while 循环中工作;和 printwriter 不写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com