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(Cat.getName());

Cat クラス自体でそれを呼び出そうとしています。あなたがしたい:

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

反復変数の名前も から に変更したことに注意してください。これはcatNamescat値が「現在見ている猫」への単なる参照であるためです。それは猫の名前でも、複数の猫 (または猫の名前) でもなく、1 匹の猫です。変数に慎重に名前を付けることが非常に重要です。これにより、正しいコードが正しく見え、間違ったコードが正しく見えなくなります。getName()... という名前の変数を呼び出すのは意味がありませんcatNames(名前のコレクションの名前は何ですか?) 。cat

元のコードからのもう 1 つの警告ベルは、forループの本体で反復変数が使用されていないことでした。これは、ほとんどの場合、何かが間違っていることを示しています。もちろん、修正版も同様です。

于 2013-03-04T08:27:30.283 に答える
2

使用する:

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

getNameは静的関数ではないため、リストにあるように、そのクラスのインスタンスで使用する必要がありますcats

于 2013-03-04T08:26:28.750 に答える
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 に答える