簡體   English   中英

如何將值設置為存儲在 ArrayList 中的特定屬性?

[英]How can I set values to specific attributes stored inside of an ArrayList?

我在名為 allAnimals 的 ArrayList 中存儲了很多對象。 每個 object 有 4 個屬性 例如 Animal(02,"tiger",270.0,16) //ID,name,weight,age

我讓用戶使用 switch 語句從 5 個不同的選項中進行選擇。 每種情況有四種情況,第五種情況允許用戶更改每個屬性。

在每個案例中,我都有一個掃描儀來獲取他的輸入(例如姓名),然后我嘗試使用 allAnimals.set(i, name); //i 為索引

我得到了一個錯誤。 (不兼容類型:java.lang.String 無法轉換為 Animal)

我正在考慮將每個屬性存儲到變量中,除了將要更改的變量,然后從列表中刪除動物,然后將其與新屬性一起添加回來。

例如,如果用戶想更改名稱。 將 ID、體重、年齡存儲到變量 allAnimals.remove(i) allAnimals.add(new Animal(02, user_input, 270.0, 16);

但我不認為這是有效的。

我還想過在 Animal class 中添加一些 Setter 方法,但我不知道它是如何工作的。(或者它是否會工作)

如果我沒有解釋什么,我對此很抱歉。

這是我的一些代碼:

System.out.println("Choose what you want to change from the menu below.");
System.out.println("--------------------------------------------------");
System.out.println("1. Change only its ID.");
System.out.println("2. Change only its name.");
System.out.println("3. Change only its weight.");
System.out.println("4. Change only its age.");
System.out.println("5. Change everything.");

Scanner get_new_option = new Scanner(System.in);
int option = get_new_option.nextInt();

switch(option)
{
   case 1:
   //Haven't tried to change the ID cause I have to test that the given ID doesn't already exist within the ArrayList

     System.out.println("Enter its ID.");
     Scanner get_new_id = new Scanner(System.in);
     int code = get_new_id.nextInt();
   break;

  case 2:
     System.out.println("Enter its name.");
     Scanner get_new_name = new Scanner(System.in);
     String name = get_new_name.nextLine();
     AllAnimals.set(i,name); //error here


  break;  
 //case 3:
 //break;
 }

這里還有一種方法,我用它來初始化動物園中已經存在的 15 只動物。 我只是在我的 main 中調用該方法。

static ArrayList<Animal> AllAnimals = new ArrayList<Animal>();
static void InitAnimals()
{
    AllAnimals.add(new Animal(1,"turtle",90,150));
    AllAnimals.add(new Animal(2,"dolphine",80,17));
    AllAnimals.add(new Animal(3,"crocodile",75,20));
    AllAnimals.add(new Animal(4,"cheetah",120,20));
    AllAnimals.add(new Animal (5,"tiger",200,20));
    AllAnimals.add(new Animal(6,"owl",40,20));
    AllAnimals.add(new Animal(7," bonobo",80,25));
    AllAnimals.add(new Animal(8,"brown bear",450,24));
    AllAnimals.add(new Animal(9,"anacoda",60,18));
    AllAnimals.add(new Animal(10,"bald eagle",63,30));
    AllAnimals.add(new Animal(12,"panda",200,24));
    AllAnimals.add(new Animal(13,"jaguar",260,21));
    AllAnimals.add(new Animal(14,"orangutan",430,26));
    AllAnimals.add(new Animal(15,"shark",300,26));
}

無需重寫對象,只需通過 id 獲取您需要的 object 並直接更改其中的字段,或者例如通過 setter

下面給出了如何在索引i處更改動物的名稱:

System.out.print("Enter new name: ");
String name = scanner.nextLine();
Animal animal = allAnimals.get(i);
animal.setName(name);
allAnimals.set(i, animal);

其中scannerScanner的 object , setName是屬性namepublic設置方法。

注意:您不應為每個輸入創建新的Scanner object。 刪除所有Scanner實例並僅創建一個實例,例如Scanner scanner = new Scanner(System.in); 在您創建菜單的方法的開頭。 然后,您可以對方法內的所有輸入重用scanner

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM