-2

Java でオブジェクトとクラスを学習しようとしていますが、オンライン チュートリアルで、Eclipse でコンパイル/実行できないコードが提供されています。

クラスを保存した後にプログラムをコンパイルすると、エラーが発生します。

スレッド「メイン」の例外 java.lang.Error: 未解決のコンパイル
の問題: メソッド setAge(int) は、タイプ Puppy に対して未定義です
メソッド getAge() は、Puppy.main(Puppy.java:23) のタイプ Puppy に対して未定義です

public class Puppy{

       int puppyAge;

       public Puppy(String name){
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name ); 
   }
   public setAge( int age ){
       puppyAge = age;
   }

   public getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }
   public static void main(String []args){
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge ); 
   }
}

http://www.tutorialspoint.com/java/java_object_classes.htm

(コードはページの真ん中にあります)

コンストラクタクラスのプログラムです。戻り値の型があってはなりません。

4

5 に答える 5

10

メソッドシグネチャに戻り値の型がありません(またはチュートリアル)。

public setAge( int age ){
       puppyAge = age;
   }

   public getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }

する必要があります

public void setAge( int age ){
       puppyAge = age;
   }

   public int getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }
于 2013-01-02T22:49:15.523 に答える
7

メソッドの戻り値の型がありません。

 public setAge( int age ){

する必要があります

   public void setAge( int age ){

   public getAge( ){

する必要があります

   public int getAge( ){
于 2013-01-02T22:49:04.150 に答える
4

あなたのメソッドは、返されるもの(型)を述べていません。それらを次のように変更します。

 public void setAge(int age) { ... }
 public int getAge() { ... }

ドキュメントには、Java メソッドの 6 つの部分がリストされています。

  1. 修飾子 — public、private、および後で学習するその他の修飾子。
  2. 戻り値の型— メソッドによって返される値のデータ型、またはメソッドが値を返さない場合は void。(あなたはこれを逃した)
  3. メソッド名 — フィールド名の規則はメソッド名にも適用されますが、規則は少し異なります。
  4. 括弧内のパラメーター リスト — 入力パラメーターのカンマ区切りのリストで、前にデータ型があり、括弧 () で囲まれています。パラメーターがない場合は、空の括弧を使用する必要があります。
  5. 例外リスト — 後で説明します。
  6. 中かっこで囲まれたメソッド本体 (ローカル変数の宣言を含むメソッドのコード) がここに入ります。

詳細: http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

于 2013-01-02T22:49:51.153 に答える
2

うまくいかないのはなぜですか?

と に戻り値の型を追加する必要がgetAge()ありsetAge()ます。

Java 言語仕様では、メソッド宣言は次の形式に従う必要があることに注意してください。

MethodModifiers (オプション) TypeParameters (オプション) Result MethodDeclarator Throws (オプション)

リラックスして、これをゆっくり見てみましょう。

  • MethodModifiers (オプション) - 各メソッドをプライベート/パブリック/保護としてマークできます。このパラメーターを省略した場合、メソッドはパッケージになります。いくつかの修飾子がありますが、これらは今あなたにとって最も興味深いものです
  • TypeParameters(optional) - ジェネリック メソッドに関するものです。これで安全にスキップできます
  • 結果 - これは重要です。すべてのメソッドは、何を返すかを明示的に指定する必要があります。これはあなたの例にはありませんでした。
  • MethodDeclarator - メソッドの名前。
  • スロー (オプション) - メソッドが例外をスローする場合は、ここに記述する必要があります。今のところ、安全にスキップできます。

ここに画像の説明を入力

動作するコードを見せてください!

public class Puppy{

    int puppyAge;

    public Puppy(String name){
        // This constructor has one parameter, name.
        System.out.println("Passed Name is :" + name );
    }
    public void setAge( int age ){
        puppyAge = age;
    }

    public int getAge( ){
        System.out.println("Puppy's age is :" + puppyAge );
        return puppyAge;
    }
    public static void main(String []args){
      /* Object creation */
        Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
        myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
        myPuppy.getAge( );

      /* You can access instance variable as follows as well */
        System.out.println("Variable Value :" + myPuppy.puppyAge );
    }
}
于 2013-01-07T21:03:46.983 に答える
0

メソッドの署名に問題があります。それらは次のようになります: public void setAge(int age) { } public int getAge() { }

あなたはタイプを逃しました。このコア Java チュートリアルを確認することをお勧めします。それはよく説明されています。

于 2016-07-31T16:53:38.487 に答える