Java水位监测告警程序开发及strukogram制作问题咨询
问题解决说明
一、现有代码已知错误
你当前的代码存在几个基础语法和逻辑漏洞,需要先修正:
- import路径错误:
java.ioException应为java.io.IOException - 方法调用语法错误:
fw.close应为fw.close() - 变量
waterLevel未初始化、未赋值就用于循环判断,会直接编译报错 - 仅实现了水位写入文件的逻辑,缺少读取文件最后一行的相关代码
二、读取文件最后一行存入waterLevel的实现
你可以通过BufferedReader逐行遍历文件内容,每次覆盖存储当前读到的行,遍历完成后最终存储的就是文件最后一行,再转为int类型赋值给waterLevel即可。
修正后的完整可运行代码如下:
import java.util.Scanner; import java.io.FileWriter; import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; public class Dam{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int waterLevel = 0; // 初始化默认值 String text; do { System.out.println("give the current water level"); // 写入水位到文件,这里用try-with-resources自动关流,无需手动写close try (FileWriter fw = new FileWriter("waterLevel.txt")) { int inputLevel = sc.nextInt(); text = inputLevel + "\n"; fw.write(text, 0, text.length()); } catch (IOException e) { e.printStackTrace(); } // 读取文件最后一行赋值给waterLevel String lastLine = ""; try (BufferedReader br = new BufferedReader(new FileReader("waterLevel.txt"))) { String currentLine; while ((currentLine = br.readLine()) != null) { lastLine = currentLine; // 逐行覆盖,最终保留最后一行 } waterLevel = Integer.parseInt(lastLine.trim()); } catch (Exception e) { e.printStackTrace(); } } while (waterLevel < 15); System.out.println("warning"); sc.close(); } }
三、对应Strukogram(结构化程序图)的制作说明
按照逻辑从上到下分层绘制即可,结构参考:
- 最顶层:程序启动 /
public class Dam - 第一层:声明变量(Scanner输入对象、int waterLevel=0、字符串变量text)
- 第二层:循环块(循环条件:
waterLevel < 15)- 循环内顺序步骤1:控制台输出输入水位提示
- 循环内顺序步骤2:读取用户输入的水位值
- 循环内顺序步骤3:异常处理块(try-catch),执行写入水位到文件的操作
- 循环内顺序步骤4:异常处理块(try-catch),读取文件最后一行转整型赋值给
waterLevel
- 第三层:跳出循环后,控制台输出预警信息
warning - 最底层:程序结束
内容的提问来源于stack exchange,提问作者Alaadin
相关产品推荐
相关产品推荐

