3

私はプログラミングに非常に慣れていないので、「ネストされたクラス」と呼ばれるもので変数を使用することについて質問があります。

class BeginningGameTest {

    int attack;
    int defend;

    public static class James
    {
        attack = 25;
        defend = 15;
    }

    public static class Janet
    {
        attack = 45;
        defend = 1;
    }
    public static class Jackson
    {
        attack = 10;
        defend = 20;
    }


    public static void main(String[] args) {

        System.out.prinln(James.attack);

    }
}

私は一般的な考えを持っていますか?「同じ」ものであるが、クラスごとに異なり、印刷行のようにアクセス方法が異なる変数を保存したいと思います。いくつかのエラーが発生しますが、同じ概念を維持し、それを理解できるようにかなり単純に保つにはどうすればよいですか?プログラミング全般に不慣れな人のためのわかりやすいチュートリアルはありますか?

前もって感謝します!

4

6 に答える 6

3

これのデザインは正しくないようです。

オブジェクト指向言語で作業するときに目指しているのは、表現したいものの基本モデルです。

これらの3つの静的クラスは同じタイプのオブジェクトを表しているように見えるので、それらの単純なモデルを作成しましょう。クッキーカッターのようなモデルを考えてください。これでカットされたすべてのクッキーは同じ一般的な「形」になりますが、それについては異なる特性(スプリンクル、フロスティングビアードなど)があります。このモデルは、独自の別のファイルにある必要があります。

public class Player {

    private String name;
    private int attack;
    private int defense;

    public Player(String theirName, int theirAttack, int theirDefense) {
        name = theirName;
        attack = theirAttack;
        defense = theirDefense;
    }

    // create getters and setters for their attack and defense
}

実際にそれを利用するには、オブジェクトをインスタンス化する必要があります。

public class BeginningGameTest {
    public static void main(String[] args) {
        Player p1 = new Player("James", 25, 15);
        Player p2 = new Player("Janet", 45, 1);
        Player p3 = new Player("Jackson", 10, 20);
        // interactions with the objects below
    }
}

いくつかの優れた初心者向けリソースは、 Javaタグwikiにすでに存在しています。それらを徹底的に読んでください。新しいことを試してみてください。理解できないことについて(良い)質問をすることを恐れないでください。

于 2013-02-10T00:48:16.807 に答える
2

内部クラスを作成してから、mainメソッド内でそのクラスのインスタンスを定義する必要があります。

public class BeginningGameTest {


    public static void main(String[] args) {
        Player james = new Player(25,15);
        Player janet = new Player(45,1);
        Player jackson = new Player(10,20);

        System.out.println(james.getAttack());
    }
}

class Player{
    int attack;
    int defend;

    public Player(int attack, int defend){
        this.attack = attack;
        this.defend = defend;
    }

    public int getAttack() {
        return attack;
    }

    public void setAttack(int attack) {
        this.attack = attack;
    }

    public int getDefend() {
        return defend;
    }

    public void setDefend(int defend) {
        this.defend = defend;
    }

}
于 2013-02-10T00:36:08.523 に答える
2

各人のクラスを定義するのではなく、インスタンスの概念を使用して人を区別する必要があります。単一のクラス「Person」を定義し、James、Jacksonなどをインスタンス化できます。それぞれに異なる攻撃/防御値を与えるために、引数付きのコンストラクターを使用できます。

オブジェクト指向プログラミングの紹介を読むことで恩恵を受けるかもしれないと思います。「オブジェクト指向プログラミング」を検索してみてください。

于 2013-02-10T00:38:39.183 に答える
1

これについては2つの方法があります。James、Janet、Jacksonがすべて同じタイプのクラスであり、BeginningGameTestであるようなサブクラスを作成できます。たとえば、Jamesは次のようになります。

public class James extends BeginningGameTest
{
    public James()
    {
        attack = 25;
        defend = 15;
    }
}

James、Janet、Jacksonになりたいと思うのは、サブクラスではなく、次のような同じクラスのBeginningGameTestのインスタンスです。

BeginningGameTest James = new BeginningGameTest();
James.setAttack(25);
James.setDefend(15);

読むべきいくつかの概念があります:

  1. クラスとインスタンス
  2. 継承

また、Java Beanに典型的なセッター(およびゲッター)の概念も暗黙のうちに紹介しました。

于 2013-02-10T00:40:58.110 に答える
0

これは機能します:

public static class James
{
    static int attack = 25;
    static int defend = 15;
}
// ...

次に、これは機能します:

public static void main(String[] args)
{
    System.out.prinln(James.attack);
}

これはおそらくより良い設計です:

public class Player()
{
   public static enum NAME { JAMES, JANET };

   int attack, defend;
   public Player(NAME name)
   {
      switch (name)
      {
         case JAMES:
            attack = 25;
            defend = 15;
            break;
         // ...
      }
   }

   public static void main(String[] args) throws Exception
   {
      System.out.println(new Player(NAME.JAMES).attack);
   }
}

これは、現実的な要件に適した設計です:(実行時にプレーヤーを作成できるようにする)

int attack, defend;
String name;
public Player(int attack1, int defend1, String name1)
{
   attack = attack1;
   defend = defend1;
   name = name1;
}
于 2013-02-10T00:40:59.223 に答える
0

簡単にできることは、攻撃と防御の変数のさまざまな値を保持するクラスのさまざまなオブジェクトを作成することです。これが同じコードです。

/*パッケージは何でも; //パッケージ名を配置しないでください!* /

class Main
{
    int attack,defend;
    public Main(int attack,int defend)
    {
        this.attack=attack;
        this.defend=defend;
    }
    public void show()
    {
        System.out.println("attack: "
        +attack+" defend: "+defend);
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        Ideone James = new Main(125,15);
        James.show();
        Ideone Janet = new Main(45,1);
        Janet.show();
        Ideone Jackson = new Main(10,20);
        Jackson.show();
    }
}
于 2014-01-21T07:59:54.237 に答える