我有一个非常愚蠢的问题让我头痛不已。
我定义了一个搜索ArrayList以查找邮政编码的方法:
public ZipCode findZip (int zip) {
ZipCode aZip = new ZipCode(0);
for(int i = 0; i < zips.size(); i++) {
if(zips.get(i).getZipCode() == zip)
aZip = zips.get(i);
else
aZip = null; }
return aZip; }
......但是,我不能称它为我的生命。无论我使用什么对象或输入参数,它每次调用时都会给出“无法找到符号”的错误。
到目前为止整个程序(直到我弄清楚它才能完成):
import java.util.*;
import java.io.*;
import java.lang.Math;
public class ZipCodeDatabase {
//Field
private ArrayList<ZipCode> zips;
//Constructor
public ZipCodeDatabase () {
zips = new ArrayList<ZipCode> ();
}
//Mutator Method
public void readZipCodeData(String filename) {
Scanner inFS = null;
FileInputStream fileByteStream = null;
try{
// open the File and set delimiters
fileByteStream = new FileInputStream("zipcodes.txt");
inFS = new Scanner(fileByteStream);
inFS.useDelimiter("[,\r\n]+");
// continue while there is more data to read
while(inFS.hasNext()) {
//read in all input
int aZip = inFS.nextInt();
String aCity = inFS.next();
String aState = inFS.next();
double aLat = inFS.nextDouble();
double aLon = inFS.nextDouble();
//Create and add new zipcode
ZipCode newZip = new ZipCode(aZip, aCity, aState, aLat, aLon);
zips.add(newZip);
}
fileByteStream.close();
// Could not find file
}catch(FileNotFoundException error1) {
System.out.println("Failed to read the data file: " + filename);
// error while reading the file
}catch(IOException error2) {
System.out.println("Oops! Error related to: " + filename);
}
}
//Accessor Methods
public ZipCode findZip (int zip) {
ZipCode aZip = new ZipCode(0);
for(int i = 0; i < zips.size(); i++) {
if(zips.get(i).getZipCode() == zip)
aZip = zips.get(i);
else
aZip = null;
}
return aZip;
}
public int distance(int zip1, int zip2) {
int dist = 0;
double p1 = 0.0;
double p2 = 0.0;
double p3 = 0.0;
if(zips.findZip(zip1) == null || zips.findZip(zip2) == null)
dist = -1;
...
错误本身是:
找不到符号 - 方法findZip(int)
您在此处使用的符号尚未在任何可见范围内声明。
使用ZipCodeDatabase.findZip(int);
会出现以下编译错误:
非静态方法findZip(int)不能从静态上下文引用
您正尝试从静态方法引用实例字段或实例方法。
我目前正在努力解决此问题,如果需要,请回复更多更新。感谢您提供的所有帮助。
ZipCode本身并没有真正发挥这个问题,它只是拉链的一堆set和get方法。
答案 0 :(得分:1)
问题来自这一行:
if(zips.findZip(zip1) == null || zips.findZip(zip2) == null)
上升到班级的顶部,我们找到了zips
的声明,这是
private ArrayList<ZipCode> zips;
这是一个问题,因为您的findZip
方法位于ZipCodeDatabase
类,而不是ArrayList
。由于该调用是从ZipCodeDatabase
的非静态方法内部发生的,因此您只需删除您正在调用它的对象。
if(findZip(zip1) == null || findZip(zip2) == null)
这相当于使用
if(this.findZip(zip1) == null || this.findZip(zip2) == null)
在ZipCodeDatabase
类的当前实例上调用该方法。
答案 1 :(得分:0)
试试这个,看它是否有效。
ZipCodeDatabase database = new ZipCodeDatabase();
database.readZipCodeData("SomeFilename.txt"); // hardcoded in code as zipcodes.txt
ZipCode myZip = database.findZip(1234);
在第一行中实例化该类,在第二行中使用数据加载它,在第三行中使用相同的实例来查找代码。