Java 如何编写for循环以分配一个数组;食物“;指向名为“的对象”;狼;?
对于我的任务,我被要求完成以下内容: 1。在动物类中创建第二个名为eat的方法。此方法应将食物对象和整数作为参数 2。在新的eat方法中使用适当的循环将食物对象喂给动物,次数在整数参数中指定 到目前为止,我的尝试如下所示:Java 如何编写for循环以分配一个数组;食物“;指向名为“的对象”;狼;?,java,foreach,Java,Foreach,对于我的任务,我被要求完成以下内容: 1。在动物类中创建第二个名为eat的方法。此方法应将食物对象和整数作为参数 2。在新的eat方法中使用适当的循环将食物对象喂给动物,次数在整数参数中指定 到目前为止,我的尝试如下所示: import java.util.ArrayList; public class Wolf extends Carnivore { ArrayList<Food> foodGroup = new ArrayList<>(); ab
import java.util.ArrayList;
public class Wolf extends Carnivore
{
ArrayList<Food> foodGroup = new ArrayList<>();
abstract public Food eat(Food x, int b) throws Exception;
{
Wolf y = new Wolf();
ArrayList<Food> foodGroup1 = y.foodGroup;
addFood(new Food("Chicekn"));
addFood(new Food("Pork"));
addFood(new Food("Steak"));
Wolf wolf1 = new Wolf();
for (Food x : wolf1.eat(foodGroup1) {
//How to find out the amount of times x has iterated?
System.out.println(//print out the amount of times food has bee fed to the wolf);
}
}
public void addFood(Food inFood)
{
foodGroup.add(inFood);
}
}
import java.util.ArrayList;
公营狼类食肉动物
{
ArrayList foodGroup=新建ArrayList();
抽象公共食品eat(食品x,int b)抛出异常;
{
狼y=新狼();
ArrayList foodGroup 1=y.foodGroup;
addFood(新食品(Chicekn));
addFood(新食品(“猪肉”));
addFood(新食品(“牛排”);
Wolf wolf1=新Wolf();
对于(食物x:wolf1.eat)(食物组1){
//如何找出x的迭代次数?
System.out.println(//打印出喂狼食物的次数);
}
}
公共食品(食品信息)
{
foodGroup.add(inFood);
}
}
我知道这个尝试可能会有很多错误,但我对Java还是新手,并且正在学习其他人认为简单的概念。如果您能帮助修复这个for循环以打印出所需的结果,我们将不胜感激,谢谢
狼类是动物类的延伸。也许这就是你想要的:
public void eat(Food food, int count) {
while (count > 0) {
addFood(food);
count--;
}
}
请注意,因为您正在创建eat的实现,所以不应该声明它abstract
。此外,没有理由声明它抛出任何东西,因为实现中没有抛出异常的内容。(稍后,如果计数为负数,您可能希望引发异常。但是如果是负数,则应声明引发特定类型异常的方法可能IllegalArgumentException
-而不是非常广泛的异常
)
另一方面,abstract
声明和分号意味着您的类实际上具有与您想象的完全不同的结构。它实际上具有以下成员:
一个字段foodGroup
一种抽象方法eat(Food,int)
l
实例初始值设定项块(声明eat
之后的大括号之间的代码)
一种方法添加食物(食物)
初始值设定项块是类顶层的一段代码。如果它前面有static
关键字,则它是一个静态初始值设定项块,在类首次加载时执行一次。如果它没有static
关键字,则它是一个实例初始值设定项块,编译器会添加块t的副本o每个类构造函数(包括默认构造函数,如果您没有声明自己的任何构造函数)。也许这就是您要寻找的:
public void eat(Food food, int count) {
while (count > 0) {
addFood(food);
count--;
}
}
请注意,因为您正在创建eat的实现,所以不应该声明它abstract
。此外,没有理由声明它抛出任何东西,因为实现中没有抛出异常的内容。(稍后,如果计数为负数,您可能希望引发异常。但是如果是负数,则应声明引发特定类型异常的方法可能IllegalArgumentException
-而不是非常广泛的异常
)
另一方面,abstract
声明和分号意味着您的类实际上具有与您想象的完全不同的结构。它实际上具有以下成员:
一个字段foodGroup
一种抽象方法eat(Food,int)
l
实例初始值设定项块(声明eat
之后的大括号之间的代码)
一种方法添加食物(食物)
初始值设定项块是类顶层的一段代码。如果它前面有static
关键字,则它是一个静态初始值设定项块,在类首次加载时执行一次。如果它没有static
关键字,则它是一个实例初始值设定项块,编译器会添加块t的副本o每个类构造函数(包括默认构造函数,如果您没有声明自己的构造函数)。您的eat
方法有几个问题:
您没有返回任何内容,因此返回类型必须为void
正如在注释中指出的,在实现中不需要abstract
关键字
你到底为什么要更新2Wolf
s?在一个新的Wolf
实例上调用eat
是没有意义的,你甚至没有传递正确的类型。你传递的是ArrayList
而不是Food
anint
,这根本没有意义
您没有在任何地方使用输入参数
for(Food x:wolf1.eat(foodGroup1)
毫无意义,除了提供错误的输入类型外,您将eat
视为它返回一个Food
的数组,而它肯定不会返回该数组。除了技术问题之外,我不知道您到底想做什么
以下是如何满足您的要求:
public void eat(Food x, int b)
{
for (int i = 0; i < b; i++
{
System.out.println("Wolf has eaten " + x + " " + i + " times.");
}
}
public void eat(食品x,int b)
{
对于(int i=0;i
如果您需要保存所有食用食物的列表,只需在循环中添加foodGroup.add(x);
。您的eat
方法有几个问题:
您没有返回任何内容,因此返回类型必须为void
如波因