【问题标题】:can't call method in javajava不能调用方法
【发布时间】:2016-02-09 07:23:10
【问题描述】:

我有一个非常愚蠢的问题,让我非常头疼。

我定义了一个搜索 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 本身并没有真正解决这个问题,它只是一组用于 zip 的 set 和 get 方法。

【问题讨论】:

  • 它在抱怨什么符号?这将是一种有用的信息。
  • 添加你得到的错误
  • 我认为您发布的代码没有任何问题。用整个代码更新您的问题。您可能在某处缺少分号或括号。
  • 可能是缺少导入或其他原因。除此之外,您还可以使用增强的 for 循环来使代码更简洁。
  • 什么是zips?如果它是ArrayList,则它没有findZip 方法。我们需要查看所有信息,否则我们只是猜测。

标签: java arraylist methods call


【解决方案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类的当前实例上的方法。

【讨论】:

    【解决方案2】:

    试试这个,看看它是否有效。

    ZipCodeDatabase database = new ZipCodeDatabase();
    database.readZipCodeData("SomeFilename.txt"); // hardcoded in code as zipcodes.txt
    ZipCode myZip = database.findZip(1234);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2013-04-19
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多