应用程序不会将随机访问文件搜索为零

时间:2015-03-27 17:14:58

标签: java jframe actionlistener

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改为字符串进行比较吗?

如果这个代码不够,我很抱歉,应用程序非常大,所以我只想给你们所需要的东西。

1 个答案:

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