0

我在尝试编写一个列出特定类中所有名称的方法时遇到此错误的问题。(底部错误)我尝试了一些事情,但对于我的生活,无法弄清楚。请帮忙,谢谢。

猫班:

public class Cat
{
// instance variables 
private String name;
private int yearOfBirth;
private int weightInKilos;

public Cat() {
   setName("");
   setYearOfBirth(0);
   setWeightInKilos(0);
}

/**
 *  
 */
public Cat(String newName, int newYearOfBirth, int newWieghtInKilos )
{
    setName(newName);
    setYearOfBirth(newYearOfBirth);
    setWeightInKilos(newWieghtInKilos); 
}


public String getName(){
    return name;
}

public int getYearOfBirth(){
    return yearOfBirth;
}

public int getWieghtInKilos(){
    return weightInKilos;
}



public void setName(String newName){
    if (newName != null ){
    name = newName;
    }
    else{
        System.out.println("Invalid Name");
    }

}

public void setYearOfBirth(int newYearOfBirth){
    if (yearOfBirth >= 0){
    yearOfBirth = newYearOfBirth;
    }
    else{
        System.out.println("Year Of Birth must not be negative!");
    }
}

public void setWeightInKilos(int newWeightInKilos){
    if (weightInKilos >= 0){
    weightInKilos = newWeightInKilos;
    }
    else{
        System.out.println("Weight must not be negative!");
    }

}

}

类猫舍:

import java.util.ArrayList;


public class Cattery
{
// instance variables - replace the example below with your own
private ArrayList <Cat> cats;
private String businessName;

/**
 * Constructor for objects of class Cattery
 */
public Cattery(String NewBusinessName)
{
    cats = new ArrayList <Cat>();
    NewBusinessName = businessName;
}

public void addCat(Cat newCat){

    cats.add(newCat);
}

public void indexDisplay(int index) {
    if((index >= 0) && (index <= cats.size()-1)) {
        System.out.println(index);
    }
    else{
        System.out.println("Invalid index position!");
    }
}

public void removeCat(int indexremove){
     if((indexremove >= 0) && (indexremove <= cats.size()-1)) {
         cats.remove(indexremove);
        }
    else{
        System.out.println("Invalid index position!");
    }
}

public void displayNames(){
   System.out.println("The current guests in Puss in Boots Cattery:");
   for(Cat catNames : cats ){
       System.out.println(Cat.getName());   //ERROR; non static method cannot be referenced from a                  static context..wtf

}
}
}

请帮忙,谢谢

4

4 回答 4

2

采用:

System.out.println(catNames.getName()); 

getName是非静态函数,因此您需要在该类的实例上使用它,就像您在cats列表中一样。

于 2013-03-04T08:26:28.750 回答
2

当你有一个实例方法时,你需要在类的特定实例上调用它。

这里:

System.out.println(Cat.getName());

你试图在Cat 课堂上调用它。你要:

for (Cat cat : cats ) {
    System.out.println(cat.getName());
}

请注意,我也将迭代变量的名称从catNames更改cat为 - 因为该值只是对“我们现在正在查看的猫”的引用。这不是猫的名字,也不是多只猫(或猫的名字)——它是一只猫。仔细命名变量非常重要——它可以帮助正确的代码看起来正确,错误的代码看起来不正确。getName()调用名为 ... 的变量没有意义catNames(名称集合的名称是什么?)但在名为 . 的变量上调用它绝对有意义cat

原始代码中的另一个警告是for循环体没有使用迭代变量——这几乎总是表明有问题。固定版本当然可以。

于 2013-03-04T08:27:30.283 回答
0
for (Cat cat : cats) {
    System.out.println(Cat.getName());
}

这里你需要使用 cat,而不是 Cat。所以使用

for (Cat cat : cats) {
    System.out.println(cat.getName());
}
于 2013-03-04T08:28:15.783 回答
0
Cat.getName() this line means getName() should be static method in Cat class, but's not as such.

所以getName()通过 instacne 访问方法。

System.out.println(catNames.getName()); 
于 2013-03-04T08:28:43.280 回答