无法调用 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方法是在ZipCodeDatabaseclass上,而不是在ArrayList上。由于该调用是从 ZipCodeDatabase 的非静态方法内部发生的,您可以简单地删除调用它的对象。

if(findZip(zip1) == null || findZip(zip2) == null)

这相当于使用

if(this.findZip(zip1) == null || this.findZip(zip2) == null)

ZipCodeDatabase class.

的当前实例上调用方法