[初学者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 方法应该做到这一点-获取和返回形成请求。您的标记为
- 为逻辑类提供
public String toString()
替代,它允许您测试和输出对象的状态。一开始,您将使用它们作为程序的输出,但在以后的学习中,它们将更多地用于调试目的。
void
并打印出数据,这使该方法在长期的情况下相当无用。 另一答案
如果要打印cat对象,请通过以下方法重写Cat类中的toString方法:
以上是关于[初学者Java删除ArrayList Java问题中的对象的主要内容,如果未能解决你的问题,请参考以下文章
Java小白入门200例106之遍历ArrayList的几种方式