无法调用 java 中的方法
can't call method in java
我有一个非常愚蠢的问题,让我很头疼。
我定义了一个搜索 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; }
...但是,我不能终生调用它。无论我使用什么对象或输入的参数,每次调用它都会给我 "cannot find symbol" 错误。
整个程序到此为止(想不通才算完):
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;
...
错误本身是:
cannot find symbol - Method findZip(int)
You are using a symbol here which has not been declared in any visible scope.
使用 ZipCodeDatabase.findZip(int);
给出以下编译器错误:
non-static method findZip(int) cannot be referenced from a static context
You are trying to reference an instance field or instance method from a static method.
我目前正在解决这个问题,如有需要,请返回更多更新。感谢大家的帮助。
ZipCode 本身并没有真正解决这个问题,它只是一组用于 zips 的设置和获取方法。
试试这个,看看它是否有效。
ZipCodeDatabase database = new ZipCodeDatabase();
database.readZipCodeData("SomeFilename.txt"); // hardcoded in code as zipcodes.txt
ZipCode myZip = database.findZip(1234);
在第一行中实例化 class,在第二行中加载数据,在第三行中使用相同的实例来查找代码。
问题来自这一行:
if(zips.findZip(zip1) == null || zips.findZip(zip2) == null)
在 class 的顶部,我们找到 zips
的声明,即
private ArrayList<ZipCode> zips;
这是个问题,因为你的findZip
方法是在ZipCodeDatabase
class上,而不是在ArrayList
上。由于该调用是从 ZipCodeDatabase
的非静态方法内部发生的,您可以简单地删除调用它的对象。
if(findZip(zip1) == null || findZip(zip2) == null)
这相当于使用
if(this.findZip(zip1) == null || this.findZip(zip2) == null)
在 ZipCodeDatabase
class.
的当前实例上调用方法
我有一个非常愚蠢的问题,让我很头疼。
我定义了一个搜索 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; }
...但是,我不能终生调用它。无论我使用什么对象或输入的参数,每次调用它都会给我 "cannot find symbol" 错误。
整个程序到此为止(想不通才算完):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;
...
错误本身是:
cannot find symbol - Method findZip(int)
You are using a symbol here which has not been declared in any visible scope.
使用 ZipCodeDatabase.findZip(int);
给出以下编译器错误:
non-static method findZip(int) cannot be referenced from a static context
You are trying to reference an instance field or instance method from a static method.
我目前正在解决这个问题,如有需要,请返回更多更新。感谢大家的帮助。
ZipCode 本身并没有真正解决这个问题,它只是一组用于 zips 的设置和获取方法。
试试这个,看看它是否有效。
ZipCodeDatabase database = new ZipCodeDatabase();
database.readZipCodeData("SomeFilename.txt"); // hardcoded in code as zipcodes.txt
ZipCode myZip = database.findZip(1234);
在第一行中实例化 class,在第二行中加载数据,在第三行中使用相同的实例来查找代码。
问题来自这一行:
if(zips.findZip(zip1) == null || zips.findZip(zip2) == null)
在 class 的顶部,我们找到 zips
的声明,即
private ArrayList<ZipCode> zips;
这是个问题,因为你的findZip
方法是在ZipCodeDatabase
class上,而不是在ArrayList
上。由于该调用是从 ZipCodeDatabase
的非静态方法内部发生的,您可以简单地删除调用它的对象。
if(findZip(zip1) == null || findZip(zip2) == null)
这相当于使用
if(this.findZip(zip1) == null || this.findZip(zip2) == null)
在 ZipCodeDatabase
class.