无法在java中调用方法

时间:2015-11-08 15:42:19

标签: java arraylist methods call

我有一个非常愚蠢的问题让我头痛不已。

我定义了一个搜索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方法。

2 个答案:

答案 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);

在第一行中实例化该类,在第二行中使用数据加载它,在第三行中使用相同的实例来查找代码。