You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java循环获取用户输入报No line found错误,求正确实现方案

解决你的输入错误与程序逻辑问题

嘿,我一眼就看到你代码里的核心问题啦!你遇到的No line found for nextline/int错误,根源是你误用了读取文件的Scanner来获取用户控制台输入,而不是专门读取控制台输入的Scanner。咱们一步步把问题理顺,修正代码:

核心问题分析

  • 你创建的Scanner fileIn = new Scanner(f)是用来读取指定文件内容的,不是读取用户在控制台输入的内容。当文件是空的时候(刚创建的新文件),调用nextLine()自然会找不到内容,抛出错误。
  • 每次循环都重复创建文件读取的Scanner和PrintWriter,不仅浪费资源,还会导致文件内容被反复覆盖,无法保留历史输入。
  • 手动关闭资源的方式不够稳妥,容易遗漏关闭操作导致资源泄漏。

修正后的完整代码

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ExpenseTracker {
    public static void main(String[] args) {
        int saldo = 10000;
        String anw = "j";
        int cost;
        File f = new File("C:\\Users\\ae65255\\Desktop\\file.txt");

        // 用try-with-resources自动管理控制台输入的Scanner,不用手动close
        try (Scanner userInput = new Scanner(System.in)) {
            // 先确保文件存在,不用每次循环都创建
            if (!f.exists()) {
                f.createNewFile();
                System.out.println("文件已创建");
            }

            while (anw.equalsIgnoreCase("j")) { // 忽略大小写,用户输入J/j都可以
                System.out.println("Ange utgiftspost:");
                String post = userInput.nextLine(); // 读取控制台输入的字符串

                System.out.println("Ange kostnad:");
                // 这里可以加个判断,确保输入的是整数,避免输入非数字报错
                while (!userInput.hasNextInt()) {
                    System.out.println("请输入有效的整数!");
                    userInput.nextLine(); // 清空无效输入
                }
                cost = userInput.nextInt();
                userInput.nextLine(); // 读取掉换行符,避免影响后续的nextLine()

                // 更新余额(你原来的saldo = +saldo -cost写法多余,直接saldo -= cost即可)
                saldo -= cost;
                System.out.println("saldo: " + saldo);

                // 将内容追加到文件(用PrintWriter的追加模式,避免覆盖原有内容)
                try (PrintWriter writer = new PrintWriter(new java.io.FileWriter(f, true))) {
                    String fileContent = "---" + post + "---" + cost + "---" + saldo;
                    writer.println(fileContent);
                } catch (IOException e) {
                    System.err.println("写入文件时出错: " + e.getMessage());
                }

                System.out.println("Vill du mata in fler uppgifter? (j/n) :");
                anw = userInput.nextLine();
            }

            System.out.println("程序结束,最终余额: " + saldo);
        } catch (IOException e) {
            System.err.println("文件操作出错: " + e.getMessage());
        }
        System.out.println("File path: " + f.getPath());
    }
}

关键修改点说明

  • 输入来源修正:使用Scanner userInput = new Scanner(System.in)专门读取控制台的用户输入,这才是获取用户输入的正确方式。
  • 文件追加模式:用FileWriter(f, true)作为PrintWriter的参数,实现文件内容追加,而不是每次覆盖原有内容。
  • 自动资源管理:用try-with-resources语法,自动关闭Scanner和PrintWriter,避免资源泄漏。
  • 输入合法性校验:增加了整数输入的校验,防止用户输入非数字导致程序崩溃。
  • 简化余额计算:把冗余的saldo = +saldo -cost改成更简洁的saldo -= cost。

这样修改后,程序就能正常读取用户的字符串和整数输入,同时正确保存记录到文件里啦!

内容的提问来源于stack exchange,提问作者CoderX9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:48:45