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()
问题是,当为SSN输入“000000000”时,它根本不进行搜索,只返回初始值,即0或null。据我所知,它不是把条目读作数字零,而是把它读作零。这是整数吗?我应该改为将ssn更改为字符串以进行比较吗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
如果代码不够,我很抱歉,应用程序相当大,所以我只想给你们所需要的 我认为问题在于:
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