gpt4 book ai didi

Java编译器没有事先检查 IF ELSE 条件(或者至少我认为这就是正在发生的事情......)

转载 作者:行者123 更新时间:2023-12-01 06:48:49 25 4
gpt4 key购买 nike

我有一个名为 File.java 的简单类文件,其中包含 3 个函数:createFilewriteContent 和必需的 main 作为驱动程序:

import java.io.*;

class CreateFile {

public static boolean createFile(File file, String fileName) throws IOException {
if (file.createNewFile()){
System.out.println(fileName + ": File created successfully!");
return false;
} else {
System.out.println(fileName + ": File already existing!");
return true;
}
}

public static void writeContent(String fileName, String fileContent, boolean append) throws IOException {
if (append = false) {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
} else {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
}
writer.write(fileContent);
writer.close();
}

public static void main(String[] args) throws IOException {

String fileName = "file.txt";
File file = new File(fileName);
boolean append = createFile(file, fileName);
String fileContent = "Hello, this is a test";
writeContent(fileName, fileContent, append);
}
}

问题出在函数 writeContent 上,该函数在最后一行被调​​用。有一个基本的 if 条件,检查写入过程是否需要追加到文件中(我知道这没有必要,但我仍在测试,所以请耐心等待)。

我收到一条错误消息,指出编译器找不到符号writer,这意味着 BufferedWriter writer 是在检查 if 之前创建的健康)状况。这正是我不明白的地方:为什么 if 条件不提前执行?

如果我在 if 和 else 语句中包含写入命令,它会很好地工作,但这会导致代码冗余,这正是我试图规避的:

    public static void writeContent(String fileName, String fileContent, boolean append) throws IOException {
if (append = false) {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
writer.write(fileContent);
writer.close();
} else {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
writer.write(fileContent);
writer.close();
}
}

我确信我对一些基本且简单的东西很迟钝 - 你介意在这里给我一个提示吗?

最佳答案

更改此:

if (append = false) {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
} else {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
}

更改为:

BufferedWriter writer;
if (append == false) {
writer = new BufferedWriter(new FileWriter(fileName, false));
} else {
writer = new BufferedWriter(new FileWriter(fileName, true));
}

如果您在大括号 {} 内创建变量,则其范围仅限于它们。因此,您应该在 if 外部创建 writer,因为稍后会用到它。

关于Java编译器没有事先检查 IF ELSE 条件(或者至少我认为这就是正在发生的事情......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325486/

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