[初学者Java删除ArrayList Java问题中的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[初学者Java删除ArrayList Java问题中的对象相关的知识,希望对你有一定的参考价值。

我很难弄清楚为什么,当我从arrayList调用特定对象时,它没有返回我想要的输出吗?我被要求创建3个新对象,并使用add方法将它们添加到arraylist,使用get在4处调用无效参数,并在2处调用一个有效参数,显示详细信息,然后删除4和2。我得到的输出从我的主要方法是

Invalid index position
2
The current guests in Puss in Boots Cattery:
Garfield
Bob
John
Invalid index position
The current guests in Puss in Boots Cattery:
Garfield
John

我不明白为什么我只得到“ 2”作为输出,而不是应将猫名“ John”存储在2中?

package pkg4;

import java.util.ArrayList;

public class Cattery   
    private ArrayList<Cat> catList;
    private String businessName;

    public Cattery(String businessName) 
        catList = new ArrayList<Cat>();
        this.businessName = businessName;
    

    public void addCat(Cat newCat) 

        catList.add(newCat);
    

    public void getCat(int index) 
        if ((index >= 0) && (index <= catList.size() - 1)) 
            Cat oneCat = catList.get(index);
            System.out.println(index);
         else 
            System.out.println("Invalid index position");
        
    

    public void removeCat(int indexRemove) 
        if ((indexRemove >= 0) && (indexRemove <= catList.size() - 1)) 
            catList.remove(indexRemove);
         else 
            System.out.println("Invalid index position");
        
    

    public void displayAllCats() 
        System.out.println("The current guests in Puss in Boots Cattery:");
        for (Cat catNames : catList) 
            System.out.println(catNames.getName());
        
    

    public static void main(String[] args) 
        Cattery allCats = new Cattery("Puss In Boots Cattery");
        Cat c1 = new Cat("Garfield", 2015, 10);
        Cat c2 = new Cat("Bob", 2020, 5);
        Cat c3 = new Cat("John", 2019, 9);
        allCats.addCat(c1);
        allCats.addCat(c2);
        allCats.addCat(c3);
        allCats.getCat(3);
        allCats.getCat(2);
        allCats.displayAllCats();
        allCats.removeCat(3);
        allCats.removeCat(1);
        allCats.displayAllCats();
    

猫类

public class Cat 
    private String name;
    private int yearOfBirth;
    private int weightInKilos;

    public Cat(String inputName, int inputYearOfBirth, int inputWeigthInKilos) 
        setName(inputName);
        setYearOfBirth(inputYearOfBirth);
        setWeigthInKilos(inputWeigthInKilos);
    

    public String getName() 
        return name;
    

    public int getYearOfBirth() 
        return yearOfBirth;
    

    public int getWeightInKilos() 
        return weightInKilos;
    

    public void setName(String name) 
        if (name != null && !name.isEmpty()) 
            this.name = name;
         else if (name == null) 
            throw new IllegalArgumentException("name cannot be null");
         else if (name.isEmpty()) 
            throw new IllegalArgumentException("name cannot be an empty String");
        
    

    public void setYearOfBirth(int yearOfBirth) 
        if (yearOfBirth > 0) 
            this.yearOfBirth = yearOfBirth;
         else 
            throw new IllegalArgumentException("year of birth cannot be negative");
        
    

    public void setWeigthInKilos(int weigthInKilos) 
        if (weigthInKilos > 0) 
            this.weightInKilos = weigthInKilos;
         else 
            throw new IllegalArgumentException(" weight in kilos cannot be negative");
        
    

答案

您正在打印索引。

public void getCat(int index) 
    if ((index >= 0) && (index < catList.size())) 
        Cat oneCat = catList.get(index);                
        System.out.println(index);  // **** here ****
    
    else
        System.out.println("Invalid index position");
    

如果要打印Cat,则需要System.out.println(oneCat);


请注意,该方法起初是有缺陷的,因为它是getter方法,因此它不应该print猫,而应该return一个:

public Cat getCat(int index) 
    if ((index >= 0) && (index < catList.size())) 
        Cat oneCat = catList.get(index);                
        return oneCat;
     else
        // you really should *throw* an exception here
    

然后您可以在主要方法中进行操作:

try 
    System.out.println(allCats.getCat(2));
 catch (IllegalArgumentException e) 
    e.printStacktrace();


一些关键点:

  • 您当前的代码可以分为逻辑类,那些类包含您正在处理的问题的“模型”,此处为Cat,以及UI或“用户界面”类,这些类涉及从用户那里获取信息并返回信息相同
  • 您的逻辑类中不应包含UI代码,这意味着您不应在这些类中从用户处获取输入或向用户返回输入。没有println,没有扫描仪,什么都没有。唯一的例外是,如果您将System.out.println用作临时的“穷人调试器”,请在程序运行时打印出关键变量的状态,并最终计划在成品中删除这些语句。
  • 用户输入和输出应该在您的UI类中,或者对于像main这样的非常简单的程序,应该是分开的。
  • Any getter
  • 方法应该做到这一点-获取和返回形成请求。您的标记为void并打印出数据,这使该方法在长期的情况下相当无用。
  • 为逻辑类提供public String toString()替代,它允许您测试和输出对象的状态。一开始,您将使用它们作为程序的输出,但在以后的学习中,它们将更多地用于调试目的。
另一答案

如果要打印cat对象,请通过以下方法重写Cat类中的toString方法:

以上是关于[初学者Java删除ArrayList Java问题中的对象的主要内容,如果未能解决你的问题,请参考以下文章

Java小白入门200例106之遍历ArrayList的几种方式

从 ArrayList 中删除项目时出错 [重复]

Java源码初学_ArrayList

Java - 如何使 ArrayList 访问不同的类方法?

Java.ArrayList。方法删除()

java - 如何从java中的另一个ArrayList中删除一个ArrayList的元素?