循环未到达文件末尾的问题 - Java

issue with loop not reaching the end of a file - Java

我正在为学校做 Java 作业。作业是处理2个文件读取第一个,用第二个对第一个做调整,最后输出到一个新文件。

    Scanner inputRecords = new Scanner(new File("Records.txt"));
    Scanner inputTransactions = new Scanner(new File("Transactions.txt"));
    BufferedWriter outputFile = (new BufferedWriter(new FileWriter("NewRecords.txt", true)));
    char code; // transaction code
    String lineTran = "";
    String lineRecord = "";
    String midS = "";
    String tidS = "";
    int tid = 0,  mid= 0;
    for (int x = 0; x < 6; x++)
    {
        lineTran = inputTransactions.nextLine();                
        code = lineTran.charAt(0);
        System.out.println(code);
        tidS = lineTran.substring(2,11);            
        tid = Integer.parseInt(tidS);
        lineRecord = inputRecords.nextLine();
        midS = lineRecord.substring(0,9);
        mid = Integer.parseInt(midS);
        if (mid < tid) // add a new record lineTran.substring(2,lineTran.length()
        {
            outputFile.write(lineRecord);
            outputFile.newLine();
            lineRecord = inputRecords.nextLine();
        }
        else if (mid == tid )
        {
            if (code == 'C') //change record
            {
                outputFile.write(lineTran.substring(2,lineTran.length()));
                outputFile.newLine();
                lineTran = inputTransactions.nextLine();
            }
            else if (code == 'D') //delete record
            {
                lineTran = inputTransactions.nextLine();
                lineRecord = inputRecords.nextLine();
            }
            else // add error
            {
                System.out.println(lineRecord + " Already Exists...add error");
                lineTran = inputTransactions.nextLine();
            }
        }
        else
        {
                if (code == 'A') // add record
                {
                    outputFile.write(lineTran.substring(2,lineTran.length()));
                    outputFile.newLine();
                    lineTran = inputTransactions.nextLine();
                }
                else if (code == 'C') // change error
                {
                    System.out.println(lineRecord + " Record already exist...Change Error");
                    lineTran = inputTransactions.nextLine();
                }
                else // delete error 
                {
                    System.out.println(lineRecord + " Record does not exist...delete error");
                    lineTran = inputTransactions.nextLine();
                }
        }

注意: Records.txt有10行信息(例如:######### lastname firstname occupation) Transactions.txt有6行信息(例子:'A,D,or C'######### lastname firstname occupation)

我遇到的问题是无论循环类型如何 运行 我都会到达 2 个死胡同之一。 1) 对于上面的for循环

D 一种 C 一种 C 386326383 Slim Kan personalTrainer 未发现更改...更改错误

线程异常 "main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 在 java.lang.String.charAt(来源不明) 在 fileHandling.main(fileHandling.java:26) 是结果,没有任何内容写入文件。

2) 如果我 运行 for 循环遍历 x<5 程序 运行 没问题,但是会跳过最后一个事务。

我尝试了 "do while" 和 "while" 循环,但只得到了相似的结果。有什么建议吗?

if 条件下,您已分配 lineTran = inputTransactions.nextLine();,然后在 for 循环的顶部再次分配它。意味着您在每个循环中解散 1 行。因此,在交易文件中你有 6 行,然后你循环将 运行 比文件中的行数多循环,因为你已经阅读 .nextLine() 多于行数。