应用程序不会在随机访问文件中搜索零
application does not search a random-access file for zero
class Screen extends JFrame {
private RandomAccessFile raf;
private JTextField tfReqSSN;
public Screen() throws IOException {
raf = new RandomAccessFile("stuff.dat", "r");
tfReqSSN.addActionListener(new HandlerSSN());
}
private class HandlerSSN implements ActionListener {
public void actionPerformed(ActionEvent event) {
int ssn = 0;
String ssnReqStr = tfReqSSN.getText();//enter text to SSN field
if (ssnReqStr.length() != 9) {
clearReqFields(); //clears input fields
tfMsg.setText("Invalid SSN Length.");
} else {
// validate request
if (isNumeric(ssnReqStr)) { //isNumeric is a method that checks if the string is a number
raf.seek(0);
while (Integer.parseInt(ssnReqStr) != ssn
&& raf.getFilePointer() < raf.length()) {
read lines.
}
}
}
}
}
}
问题是,当为 SSN 输入“000000000”时,它根本不进行搜索,它只是 returns 无论初始值是什么,即 0 或 null。据我所知,它没有将条目读取为数字零,而是将其读取为空。这是整数的事情吗?我应该改为将 ssn 更改为要比较的字符串吗?
如果代码不够,我深表歉意,应用程序非常大,所以我只想给你们提供所需的东西。
我认为问题出在这里:
int ssn = 0;
...
while (Integer.parseInt(ssnReqStr) != ssn
由于ssnReqStr等于“000000000”,所以被解析为0,ssn的值也被设置为0,这意味着while循环甚至不会执行一次,因为条件已经满足。
我假设 ssn 是在 while 循环中读取的。如果输入的数字不能为负数,您可以尝试将 ssn 的初始值设置为 -1。这样,它将始终至少执行一次。或者您可以将 while 循环转换为 do-while,因此初始值甚至都不重要。
P.S。如果文件的长度很大,在进行搜索之前解析输入的数字可能会更有效。
class Screen extends JFrame {
private RandomAccessFile raf;
private JTextField tfReqSSN;
public Screen() throws IOException {
raf = new RandomAccessFile("stuff.dat", "r");
tfReqSSN.addActionListener(new HandlerSSN());
}
private class HandlerSSN implements ActionListener {
public void actionPerformed(ActionEvent event) {
int ssn = 0;
String ssnReqStr = tfReqSSN.getText();//enter text to SSN field
if (ssnReqStr.length() != 9) {
clearReqFields(); //clears input fields
tfMsg.setText("Invalid SSN Length.");
} else {
// validate request
if (isNumeric(ssnReqStr)) { //isNumeric is a method that checks if the string is a number
raf.seek(0);
while (Integer.parseInt(ssnReqStr) != ssn
&& raf.getFilePointer() < raf.length()) {
read lines.
}
}
}
}
}
}
问题是,当为 SSN 输入“000000000”时,它根本不进行搜索,它只是 returns 无论初始值是什么,即 0 或 null。据我所知,它没有将条目读取为数字零,而是将其读取为空。这是整数的事情吗?我应该改为将 ssn 更改为要比较的字符串吗?
如果代码不够,我深表歉意,应用程序非常大,所以我只想给你们提供所需的东西。
我认为问题出在这里:
int ssn = 0;
...
while (Integer.parseInt(ssnReqStr) != ssn
由于ssnReqStr等于“000000000”,所以被解析为0,ssn的值也被设置为0,这意味着while循环甚至不会执行一次,因为条件已经满足。
我假设 ssn 是在 while 循环中读取的。如果输入的数字不能为负数,您可以尝试将 ssn 的初始值设置为 -1。这样,它将始终至少执行一次。或者您可以将 while 循环转换为 do-while,因此初始值甚至都不重要。
P.S。如果文件的长度很大,在进行搜索之前解析输入的数字可能会更有效。