循环未到达文件末尾的问题 - 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()
多于行数。
我正在为学校做 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()
多于行数。