应用程序不会在随机访问文件中搜索零

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。如果文件的长度很大,在进行搜索之前解析输入的数字可能会更有效。