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.
}
}
}
}
}
}
问题是,当&#34; 000000000&#34;为SSN输入它根本不进行搜索,它只返回初始值,即0或null。据我所知,它不是将数字作为数字读取,而是将其视为无效。这是整数的东西吗?我应该改为将ssn改为字符串进行比较吗?
如果这个代码不够,我很抱歉,应用程序非常大,所以我只想给你们所需要的东西。
答案 0 :(得分:0)
我认为问题在于:
int ssn = 0;
...
while (Integer.parseInt(ssnReqStr) != ssn
由于ssnReqStr等于“000000000”,因此它被解析为0,并且ssn的值也被设置为0,这意味着while循环甚至不执行一次,因为条件已经满足。
我假设在while循环中正在读取ssn。如果输入数字不能为负数,则可以尝试将ssn的初始值设置为-1。这样它总是必须至少执行一次。或者您可以将while循环转换为do-while,因此初始值甚至不重要。
P.S。如果文件的长度很大,则在进行搜索之前解析输入数字可能更有效。