【问题标题】:Passing an int to a class that is contained by another class将 int 传递给另一个类包含的类
【发布时间】:2021-03-20 03:54:03
【问题描述】:

我是面向对象编程的新手,想知道是否可以将 int 传递给另一个类包含的类。 我的代码可以编译,但是当我在 main 中运行 printList 时,itemID 永远不会被打印出来。

这是我的 ArrayList 类

import java.util.ArrayList;
public class ItemList{
    int itemListID
    String itemName;
    ArrayList<Item> itemList = new ArrayList<>();
     
    public ItemList(String name, int listID) {
        itemName = name;
        itemListID = listID
    }
    public void addItem(String name, double weight, double price){
        itemList.add(new Item(name,weight,price));
    }
    public int getItemListID(){
        return itemListID;
    }
    public void printItems(){
        for(int i=0; i < itemList.size(); i++){
            System.out.println(itemList.get(i));
        }
    }
}

这是 arrayList 中包含的项目类别

public class Item {
    String name;
    double weight;
    double price;
    int itemListID;
  
    public Item(String itemName,double itemWeight, double itemPrice){
        this.name = itemName;
        this.weight = itemWeight;
        this.price = itemPrice;
    }
    public int setItemListID(){
        itemListID = ItemList.getItemListID();
    }
    
    public String toString(){
        return(name + " has a weight of " + weight + " and a price of " + price + "item is in itemlist"
        + itemListID);
    }    
}

这里是主要的

public class HopefulShopMain{
    public static void main (String[] args){
         ItemList myList = new ItemList("Fruit",1);
         
         myList.addItem("Apple", 100, 60);
         myList.addItem("Banana", 118, 50);
         
         myList.printItems();
    }
}

【问题讨论】:

  • +int itemListID ???只是 itemListID ,它也曾经 setValue 吗?
  • 向我们展示更多代码。我们需要看到你创建一个ItemList 的实例,添加一些带有addItem() 的条目,然后调用printItems()
  • 我认为这里缺少一些代码。你能把主要的也加进去吗?
  • 你的setItemListID() 甚至不应该编译。事实上,它似乎是在错误的类。我希望看到(在课堂上ItemList,而不是课堂上Item):public void setItemListID(int ID) { itemListID = ID; }
  • 您的代码,如图所示,仍然不应该编译。在ItemList.getItemListID();,在ItemList 类中没有名为getItemListID() 的静态成员。不过,不应该……见我之前的评论。

标签: java oop arraylist


【解决方案1】:

想知道是否可以将 int 传递给另一个类包含的类

是的。这可以在不同的级别(构造函数或方法)以不同的方式完成。

在您的示例中,您可以将 itemListID 传递给 Item 的构造函数:

    public void addItem(String name, double weight, double price){
        itemList.add(new Item(name,weight,price,this.itemListID));
    }

然后您的 Item 类可以将该值保留在字段中,就像它在其构造函数中获取的其他值一样。

public class Item {
    String name;
    double weight;
    double price;
    int itemListID;
  
    public Item(String itemName,double itemWeight, double itemPrice, int itemListID){
        this.name = itemName;
        this.weight = itemWeight;
        this.price = itemPrice;
        this.itemListID = itemListID;
    }
    
    public String toString(){
        return(name + " has a weight of " + weight + " and a price of " + price + "item is in itemlist"
        + itemListID);
    }    
}

或者,您可以将整个 ItemList 传递给构造函数,以便它可以引用 ItemList 上的任何值

或者您可以将Item 设为ItemList 内的(非静态)嵌套类,这样它就可以直接引用该字段。这可能适合您的情况,因为您似乎只希望 ItemItemList 类本身创建和访问。

import java.util.ArrayList;
public class ItemList{
    int itemListID
    String itemName;
    ArrayList<Item> itemList = new ArrayList<>();
     
    public ItemList(String name, int listID) {
        itemName = name;
        itemListID = listID
    }
    public void addItem(String name, double weight, double price){
        itemList.add(new Item(name,weight,price));
    }
    public int getItemListID(){
        return itemListID;
    }
    public void printItems(){
        for(int i=0; i < itemList.size(); i++){
            System.out.println(itemList.get(i));
        }
    }
    class Item {
        String name;
        double weight;
        double price;
      
        public Item(String itemName,double itemWeight, double itemPrice){
            this.name = itemName;
            this.weight = itemWeight;
            this.price = itemPrice;
        }
        
        public String toString(){
            return(name + " has a weight of " + weight + " and a price of " + price + "item is in itemlist"
            + ItemList.this.itemListID);
        }    
    }
}

【讨论】:

  • 对于第一个解决方案,我必须在 addItem 方法中添加一个 itemListID 参数吗?
  • 否,因为ItemList 已经有一个itemListID 字段。您可以从ItemList(如addItem)的非静态方法中访问它,就像访问任何其他字段一样。那里的“this.”明确告诉编译器您正在谈论该字段,而不是可能共享相同名称的其他一些变量。
  • 啊,我知道我需要两个构造函数了,非常感谢
  • 我会小心这个决定。拥有两个构造函数的愿望可能表明您的类履行了不同的职责,应该将其分为两个不同的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2013-12-10
  • 2013-07-24
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多