継承されたクラスの配列リストからアイテムを変更するにはどうすればよいですか?

helpThisProgrammer

動物の追加、変更、削除、印刷ができる動物園管理システムを作っています。このプロジェクトでは、ArrayListという動的配列を使用しています。私の問題は、継承されたクラスの要素を変更できないことです。ただし、親クラスの要素を変更することはできます。
これは私の親クラスです:

public abstract class Animals {
    String name, animalID, type, food;
    int age;

    Animals(String name, String animalID, String type, String food, int age)
    {
        this.name = name;
        this.animalID = animalID;
        this.type = type;
        this.food = food;
        this.age = age;
    }

    Animals()
    {
        this ("No Name", "No Animal ID","No Type Specified","No Food Specified",-1);
    }

    public abstract String getName();
    public abstract void setName(String name);
    public abstract String getAnimalID();
    public abstract void setAnimalID(String animalID);
    public abstract String getType();
    public abstract void setType(String type);
    public abstract String getFood();
    public abstract void setFood(String food);
    public abstract int getAge();
    public abstract void setAge(int age);
    public abstract void print();
}

これは私の継承されたクラスです:

public class Birds extends Animals {
    String furColour, importLocation;
    int cageNumber;

    Birds(String name, String animalID, String type, String food, int age,String furColour, String importLocation, int cageNumber)
    {
        super(name,animalID,type,food,age);
        this.furColour = furColour;
        this.importLocation = importLocation;
        this.cageNumber = cageNumber;
    }

    Birds ()
    {
        this (null,null,null,null,0,"No Fur Colour Specified","No Import Location Specified",-1);
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getAnimalID() {
        return animalID;
    }

    @Override
    public void setAnimalID(String animalID) {
        this.animalID = animalID;
    }

    @Override
    public String getType() {
        return type;
    }

    @Override
    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String getFood() {
        return food;
    }

    @Override
    public void setFood(String food) {
        this.food = food;
    }

    @Override
    public int getAge() {
        return age;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }

    public String getFurColour() {
        return furColour;
    }

    public void setFurColour(String furColour) {
        this.furColour = furColour;
    }

    public String getImportLocation() {
        return importLocation;
    }

    public void setImportLocation(String importLocation) {
        this.importLocation = importLocation;
    }

    public int getCageNumber() {
        return cageNumber;
    }

    public void setCageNumber(int cageNumber) {
        this.cageNumber = cageNumber;
    }

    @Override
    public void print()
    {
        System.out.println("Name: "+name+"\nAnimal ID: "+animalID+"\nType "+type+"\nFood: "+food+"\nAge: "+age+"\nFur Colour: "+furColour+"\nImport Location: "+importLocation+"\nCage Number: "+cageNumber+"\n");
    }
}

たとえば、特定の鳥の情報がインデックス5の配列リストにすでに存在すると仮定すると、インデックス5の鳥の毛皮の色情報を変更するにはどうすればよいですか。

これはmodifyこれまでの私の機能です:

static public void modify()
    {
        System.out.print("Enter Animal ID: ");
        String modifyId = input.next();
        for (int i=0; i<zooAnimals.size(); i++)
        {
            if (zooAnimals.get(i).getAnimalID().equals(modifyId))
            {
                System.out.println("Animal Modify Menu\n------------------------------");
                String animalType = zooAnimals.get(i).getType();
                switch (animalType)
                {
                    case "Bird": modifyBird(i,modifyId);
                        break;
                    case "Monkey": modifyMonkey(i);
                        break;
                    case "Lion": modifyLion(i);
                        break;
                }
            }
            else
            {
                System.out.println("Animal Id does not exist");
            }
        }
    }

static public void modifyMenu()
{
    System.out.println("A. Change Name");
    System.out.println("B. Change ID");
    System.out.println("C. Change Food");
    System.out.println("D. Change Age");
}
static public void modifyBird(int animalIndex, String id)
{
    char birdSelect;
    boolean continueLoop = true;
    do
    {
        modifyMenu();
        System.out.println("E. Change Fur Colour");
        System.out.println("F. Change Import Location");
        System.out.println("G. Change Cage Number");
        System.out.println("H. Back to Main Menu");
        System.out.print("Choose an option: ");
        birdSelect = input.next().charAt(0);
        switch (birdSelect)
        {
            case 'a':
            case 'A': System.out.print("Enter New Name: ");
                         String newName = input.next();
                         zooAnimals.get(animalIndex).setName(newName);
                         System.out.println("Name Changed!");
                break;
            case 'b':
            case 'B': System.out.print("Enter New ID: ");
                        String newId = input.next();
                        zooAnimals.get(animalIndex).setAnimalID(newId);
                         System.out.println("ID Changed!");
                break;
            case 'c':
            case 'C': System.out.print("Enter New Food: ");
                        String newFood = input.next();
                        zooAnimals.get(animalIndex).setFood(newFood);
                         System.out.println("Food Changed!");
                break;
            case 'd':
            case 'D': System.out.print("Enter New Age: ");
                        int newAge = input.nextInt();
                        zooAnimals.get(animalIndex).setAge(newAge);
                         System.out.println("Age Changed!");
                break;
            case 'e':
            case 'E': System.out.print("Enter New Fur Colour");
                         String newColour = input.next();
                         //zooAnimals.get(animalIndex).setFurColour = newColour;
                         //How do I do this?
                break;
            case 'f':
            case 'F':
                break;
            case 'g':
            case 'G':
                break;
            case 'h':
            case 'H':
                break;
            default: System.out.println("Please choose a valid option!");
            break;
        }
    } while (continueLoop);
}

static public void modifyMonkey(int animalIndex)
{
    modifyMenu();
}

static public void modifyLion(int animalIndex)
{
    modifyMenu();
}

これは私のaddコードをよりよく理解するための私の関数です:

static public void add()
{
    boolean continueLoop = true;
    do
    {
        System.out.println();
        System.out.println("Add Menu\n----------------");
        System.out.println("A. Add a Bird");
        System.out.println("B. Add a Monkey");
        System.out.println("C. Add a Lion");
        System.out.println("D. Back to Main Menu");
        System.out.print("Choose an Option: ");
        char animalType = input.next().charAt(0);
        System.out.println();
        if (animalType == 'd' || animalType == 'D')
        {
            System.out.println();
            menu();
        }
        else
        {
            System.out.print("Enter Animal Name: ");
            String animalName = input.next();
            System.out.print("\nEnter Animal ID: ");
            String animalId = input.next();
            System.out.print("\nEnter Animal Food: ");
            String animalFood = input.next();
            boolean isNumber;
            System.out.print("\nEnter Animal Age: ");
            do
            {
                if (input.hasNextInt())
                {
                    int animalAge = input.nextInt();
                    isNumber = true;
                    System.out.println();
                    switch (animalType)
                    {
                        case 'a':
                        case 'A': addBird(animalName,animalId,"Bird",animalFood,animalAge);
                            break;
                        case 'b':
                        case 'B': addMonkey(animalName,animalId,"Monkey",animalFood,animalAge);
                            break;
                        case 'c':
                        case 'C': addLion(animalName,animalId,"Lion",animalFood,animalAge);
                            break;
                        case 'd':
                        case 'D': menu();
                            break;
                        default: System.out.println("Please choose a valid option");
                            break;
                    }
                }
                else
                {
                    System.out.println("Invalid Input! Please Enter Again");
                    isNumber = false;
                    input.next();
                }
            } while (!(isNumber));
         }  
    } while (continueLoop);
}

static public void addBird(String name, String animalID, String type, String food, int age)
{
    Animals b;
    System.out.print("Enter Bird's Fur Colour: ");
    String birdColour = input.next();
    System.out.print("\nEnter Bird's Imported Location: ");
    String birdLoc = input.next();
    System.out.print("\nEnter Bird's Cage Number: ");
    boolean isNumber;
    do
    {
        if (input.hasNextInt())
        {
            int birdCageNum = input.nextInt();
            isNumber = true;
            b = new Birds(name,animalID,type,food,age,birdColour,birdLoc,birdCageNum);
            zooAnimals.add(b);
        }
        else
        {
            System.out.println("Enter an Integer Number!\nEnter again: ");
            isNumber = false;
            input.next();
        }
    } while (!(isNumber));
}

static public void addMonkey(String name, String animalID, String type,String food, int age)
{
    Animals m;
    System.out.print("Enter Monkey's Behaviour (Wild, Normal, Calm): ");
    String behaviour = input.next();
    System.out.print("\nEnter Number of Offsprings: ");
    boolean isNumber;
    do
    {
        if (input.hasNextInt())
        {
            int offsprtingNum = input.nextInt();
            isNumber = true;
            m = new Monkey(name,animalID,type,food,age,behaviour,offsprtingNum);
            zooAnimals.add(m);
        }
        else
        {
            System.out.println("Enter an Integer Number!\nEnter again: ");
            isNumber = false;
            input.next();
        }
    } while (!(isNumber));
}

static public void addLion(String name, String animalID, String type,String food, int age)
{
    Animals l;
    System.out.print("Enter Lion's Health (Strong, Normal, Weak): ");
    String health = input.next();
    System.out.print("Enter Number of Meats eaten: ");
    boolean isNumber;
    do
    {
        if (input.hasNextInt())
        {
            int meatNumber = input.nextInt();
            isNumber = true;
            l = new Lion(name, animalID, type, food,age,health, meatNumber);
            zooAnimals.add(l);
        }
        else
        {
            System.out.print("\nInvalid Input!\nEnter Again:");
            isNumber = false;
            input.next();
        }
    } while (!(isNumber));
}
nbrooks

あなたArrayListはタイプのようですがAnimalsBirdsクラスで定義されている要素の1つでメソッドを呼び出したいと考えています要素を取得した後、それをtypeにキャストしBirds、関連するメソッドを呼び出します。

((Birds) zooAnimals.get(animalIndex)).setFurColour(newColour);

キャストは、オブジェクトの基になる型が何であるかをコンパイラーに通知するだけなので、その型のメソッドにアクセスできます。継承に関する公式のJavaチュートリアルには、型キャストがどのように機能するかについての詳細があります。

余談ですが、慣例として、クラス名は通常、複数形ではなく単数形(BirdAnimal)にする必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Angular JSで特定のネストされた配列アイテム属性の変更を監視するにはどうすればよいですか?

分類Dev

C ++で継承されたタイプのアクセスタイプを変更するにはどうすればよいですか?

分類Dev

継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

分類Dev

C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

分類Dev

クラス内の関数で構成される配列からアイテムを削除するにはどうすればよいですか?

分類Dev

クラスによって取得されたアイテムの配列でn番目の子を取得するにはどうすればよいですか?

分類Dev

サブクラスで継承されたAPIメンバーの名前を変更するにはどうすればよいですか?

分類Dev

多次元(ネストされた)配列の特定のアイテムのインデックスを取得するにはどうすればよいですか?

分類Dev

別の配列から承認されたIDを持つアイテムを取得するにはどうすればよいですか?map()filter()または?

分類Dev

クリックされたときにrecyclerviewアイテムとサブアイテムを変更し、フラグメントからクリックされた位置のデータを取得するにはどうすればよいですか?

分類Dev

jsonのネストされた配列からアイテムを選択するにはどうすればよいですか?

分類Dev

アイテムのリスト(抽象クラスから継承)をその抽象クラスとして使用するにはどうすればよいですか?

分類Dev

配列からアクティブなアイテムのリストを取得するにはどうすればよいですか?

分類Dev

itemsControlから継承-アイテムのタイプを変更するにはどうすればよいですか?

分類Dev

Reactの状態を介してリストアイテムクラスを段階的に変更するにはどうすればよいですか?

分類Dev

rxjava delay:リストから発行された各アイテムの可変遅延を取得するにはどうすればよいですか?

分類Dev

リストから選択したアイテムの背景色を変更するにはどうすればよいですか?

分類Dev

LuaBridgeを使用して同じクラスから継承された2つのクラスを登録するにはどうすればよいですか?

分類Dev

リストボックスで選択したアイテムの背景を変更するにはどうすればよいですか?

分類Dev

シリアル化された配列の個々のアイテムにアクセスするにはどうすればよいですか?

分類Dev

値を変更するためにリストアイテムにアクセスするにはどうすればよいですか

分類Dev

エイリアスの名前を変更したり、システムから完全に削除したりするにはどうすればよいですか?

分類Dev

R:data.tableリストのアイテム(またはオブジェクト)名を変更するにはどうすればよいですか?

分類Dev

PHPでネストされた配列からアイテムを削除するにはどうすればよいですか?

分類Dev

ネストされた配列のすべてのアイテムをトレースするにはどうすればよいですか?

分類Dev

クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

分類Dev

ASP .NET Core 2.1でIdentityUserから継承されたクラスのAspNetUsersテーブルの名前を変更するにはどうすればよいですか?

分類Dev

Pythonの子クラスの変更を最小限に抑えて、親__init __()から継承された属性をわずかに変更するにはどうすればよいですか?

分類Dev

カスタムリストビュー配列アダプタクラスのリストビューから行を削除し、リストビュー内の残りのアイテムを更新するにはどうすればよいですか?

Related 関連記事

  1. 1

    Angular JSで特定のネストされた配列アイテム属性の変更を監視するにはどうすればよいですか?

  2. 2

    C ++で継承されたタイプのアクセスタイプを変更するにはどうすればよいですか?

  3. 3

    継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

  4. 4

    C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

  5. 5

    クラス内の関数で構成される配列からアイテムを削除するにはどうすればよいですか?

  6. 6

    クラスによって取得されたアイテムの配列でn番目の子を取得するにはどうすればよいですか?

  7. 7

    サブクラスで継承されたAPIメンバーの名前を変更するにはどうすればよいですか?

  8. 8

    多次元(ネストされた)配列の特定のアイテムのインデックスを取得するにはどうすればよいですか?

  9. 9

    別の配列から承認されたIDを持つアイテムを取得するにはどうすればよいですか?map()filter()または?

  10. 10

    クリックされたときにrecyclerviewアイテムとサブアイテムを変更し、フラグメントからクリックされた位置のデータを取得するにはどうすればよいですか?

  11. 11

    jsonのネストされた配列からアイテムを選択するにはどうすればよいですか?

  12. 12

    アイテムのリスト(抽象クラスから継承)をその抽象クラスとして使用するにはどうすればよいですか?

  13. 13

    配列からアクティブなアイテムのリストを取得するにはどうすればよいですか?

  14. 14

    itemsControlから継承-アイテムのタイプを変更するにはどうすればよいですか?

  15. 15

    Reactの状態を介してリストアイテムクラスを段階的に変更するにはどうすればよいですか?

  16. 16

    rxjava delay:リストから発行された各アイテムの可変遅延を取得するにはどうすればよいですか?

  17. 17

    リストから選択したアイテムの背景色を変更するにはどうすればよいですか?

  18. 18

    LuaBridgeを使用して同じクラスから継承された2つのクラスを登録するにはどうすればよいですか?

  19. 19

    リストボックスで選択したアイテムの背景を変更するにはどうすればよいですか?

  20. 20

    シリアル化された配列の個々のアイテムにアクセスするにはどうすればよいですか?

  21. 21

    値を変更するためにリストアイテムにアクセスするにはどうすればよいですか

  22. 22

    エイリアスの名前を変更したり、システムから完全に削除したりするにはどうすればよいですか?

  23. 23

    R:data.tableリストのアイテム(またはオブジェクト)名を変更するにはどうすればよいですか?

  24. 24

    PHPでネストされた配列からアイテムを削除するにはどうすればよいですか?

  25. 25

    ネストされた配列のすべてのアイテムをトレースするにはどうすればよいですか?

  26. 26

    クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

  27. 27

    ASP .NET Core 2.1でIdentityUserから継承されたクラスのAspNetUsersテーブルの名前を変更するにはどうすればよいですか?

  28. 28

    Pythonの子クラスの変更を最小限に抑えて、親__init __()から継承された属性をわずかに変更するにはどうすればよいですか?

  29. 29

    カスタムリストビュー配列アダプタクラスのリストビューから行を削除し、リストビュー内の残りのアイテムを更新するにはどうすればよいですか?

ホットタグ

アーカイブ