Java 如何编写for循环以分配一个数组;食物“;指向名为“的对象”;狼;?

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

对于我的任务,我被要求完成以下内容:

1。在动物类中创建第二个名为eat的方法。此方法应将食物对象和整数作为参数

2。在新的eat方法中使用适当的循环将食物对象喂给动物,次数在整数参数中指定

到目前为止,我的尝试如下所示:

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
    关键字
  • 你到底为什么要更新2
    Wolf
    s?在一个新的
    Wolf
    实例上调用
    eat
    是没有意义的,你甚至没有传递正确的类型。你传递的是
    ArrayList
    而不是
    Food
    an
    int
    ,这根本没有意义
  • 您没有在任何地方使用输入参数
  • 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
  • 如波因