Java 应用程序不会在随机访问文件中搜索零 类屏幕扩展JFrame{ 私人文件raf; 专用JTextField tfReqSSN; public Screen()引发异常{ raf=新的随机访问文件(“stuff.dat”、“r”); tfReqSSN.addActionListener(新handlersn()); } 私有类handlersn实现ActionListener{ 已执行的公共无效操作(操作事件){ int-ssn=0; 字符串ssnReqStr=tfReqSSN.getText();//在SSN字段中输入文本 如果(ssnReqStr.length()!=9){ clearReqFields();//清除输入字段 setText(“无效的SSN长度”); }否则{ //验证请求 if(isNumeric(ssnReqStr)){//isNumeric是一种检查字符串是否为数字的方法 raf.seek(0); while(Integer.parseInt(ssnReqStr)!=ssn &&raf.getFilePointer()

Java 应用程序不会在随机访问文件中搜索零 类屏幕扩展JFrame{ 私人文件raf; 专用JTextField tfReqSSN; public Screen()引发异常{ raf=新的随机访问文件(“stuff.dat”、“r”); tfReqSSN.addActionListener(新handlersn()); } 私有类handlersn实现ActionListener{ 已执行的公共无效操作(操作事件){ int-ssn=0; 字符串ssnReqStr=tfReqSSN.getText();//在SSN字段中输入文本 如果(ssnReqStr.length()!=9){ clearReqFields();//清除输入字段 setText(“无效的SSN长度”); }否则{ //验证请求 if(isNumeric(ssnReqStr)){//isNumeric是一种检查字符串是否为数字的方法 raf.seek(0); while(Integer.parseInt(ssnReqStr)!=ssn &&raf.getFilePointer(),java,jframe,actionlistener,Java,Jframe,Actionlistener,问题是,当为SSN输入“000000000”时,它根本不进行搜索,只返回初始值,即0或null。据我所知,它不是把条目读作数字零,而是把它读作零。这是整数吗?我应该改为将ssn更改为字符串以进行比较吗 如果代码不够,我很抱歉,应用程序相当大,所以我只想给你们所需要的 我认为问题在于: class Screen extends JFrame { private RandomAccessFile raf; private JTextField tfReqSSN; publi

问题是,当为SSN输入“000000000”时,它根本不进行搜索,只返回初始值,即0或null。据我所知,它不是把条目读作数字零,而是把它读作零。这是整数吗?我应该改为将ssn更改为字符串以进行比较吗


如果代码不够,我很抱歉,应用程序相当大,所以我只想给你们所需要的

我认为问题在于:

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.
                    }
                }
            }
        }
    }
}         
由于ssnReqStr等于“000000000”,它被解析为0,并且ssn的值也被设置为0,这意味着while循环甚至不会执行一次,因为条件已经满足

我假设ssn正在while循环中读取。如果输入数字不能为负数,可以尝试将ssn的初始值设置为-1。这样,它将始终必须至少执行一次。或者您可以将while循环转换为do-while,这样初始值就无关紧要了


注意:如果文件长度较大,则在执行搜索之前解析输入编号可能会更有效。

否,您通过提供一个简短的“n”甜美示例来说明问题,这样做是正确的。更好的是,只需编写代码,以一种简单的方式读取和解析文件。更好的是,如果制作那个片段能让你发现你的问题;然后你可以把它贴出来作为你自己问题的答案!
int ssn = 0;
...
while (Integer.parseInt(ssnReqStr) != ssn