java对象数组

java对象数组,java,arrays,Java,Arrays,我有一个任务,其中我必须创建三个类,一个执行所有I/O的客户机类,一个维护catalogItem对象列表的catalogItem类和一个定义商店目录中单个项目的catalogItem类 我试着先从简单开始,创建数组,并确保它接受数据,然后再继续剩下的任务。我能够毫无问题地编译它,但是当我试图显示数组时,我什么也没有得到 import java.util.Scanner; public class lab3 { public static void main(String args[])

我有一个任务,其中我必须创建三个类,一个执行所有I/O的客户机类,一个维护catalogItem对象列表的catalogItem类和一个定义商店目录中单个项目的catalogItem类

我试着先从简单开始,创建数组,并确保它接受数据,然后再继续剩下的任务。我能够毫无问题地编译它,但是当我试图显示数组时,我什么也没有得到

import java.util.Scanner;

public class lab3
{
    public static void main(String args[])
    {
        Scanner in = new Scanner(System.in);

        Catalog catalog = new Catalog();

        boolean endCatalog = false;
        while (!endCatalog)
        {
            System.out.println("Please choose and option: \n"
            + "1 - Display all items of the catalog\n"
            + "2 - Display an item by keyword\n"
            + "3 - Add an item to the catalog\n"
            + "4 - Remove an item from the catalog\n"
            + "5 - Change the cost of one item in the catalog\n"
            + "6 - Change the cost of all items in catalog by percent\n"
            + "7 - Exit");

            int choice = in.nextInt();

            switch (choice) {
            case 1: System.out.println(catalog.displayAll()); break;
            case 2: System.out.println("Display keyword"); break;
            case 3: System.out.println("Add item:\nEnter ID: ");
                        int newId=in.nextInt();
                        System.out.println("Enter description: ");
                        String newDesc=in.next();
                        System.out.println("Enter cost: ");
                        double newCost=in.nextDouble();
                        catalog.add(newId, newDesc, newCost); break;
            case 4: System.out.println("Remove item"); break;
            case 5: System.out.println("Change cost of one item"); break;
            case 6: System.out.println("Change cost by %"); break;
            case 7: endCatalog=true; break; }

        }   
    }
}


class Catalog
{
    final static int MAX = 100;
    private CatalogItem[] catalogItems;
    int inUse;

    public Catalog()
    {
        catalogItems=new CatalogItem[MAX]; 
    }   
    public void add(CatalogItem newItem)
    {
        inUse = 0;
        if(inUse<MAX) {
            catalogItems[inUse] = newItem;
            inUse++; }
    }
    public void add(int newId, String newDesc, double newCost)
    {
        CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

    }
    /*public void remove(int id)
    {

    }
    public String find(String keyword)
    {

    }
    public void changeCost(int id, double percent)
    {

    }
    public void increaseCost(double percent)
    {

    }
    public String toString()
    {
    }
    public boolean equals(Catalog obj)
    {

    }*/ 

    public String displayAll()
    {
        String str = "";

        for (int i=0; i<inUse; i++) {
            str = str + "\n" + catalogItems[i]; }

        return str;
    }   
}



class CatalogItem
{
    private int itemID;
    private String description;
    private double cost;

    public CatalogItem()
    {
        itemID = 1;
        description = " ";
        cost = 0.0;
    }

    public CatalogItem(int newID, String newDesc, double newCost)
    {
        itemID = newID;
        description = newDesc;
        cost = newCost;
    }

    public int getItemID()
    {
        return itemID;
    }

    public void setItemID(int newID)
    {
        itemID=newID;
    }

    public String getDescription()
    {
        return description;
    }

    public void setDescription(String newDesc)
    {
        description=newDesc;
    }

    public double getCost()
    {
        return cost;
    }

    public void setCost(double newCost)
    {
        cost=newCost;
    }

    public String toString()
    {
        return itemID + ", " + description + ", " + cost;
    }

    public boolean equals(CatalogItem obj)
    {
        return false;
    }
}
import java.util.Scanner;
公共类lab3
{
公共静态void main(字符串参数[])
{
扫描仪输入=新扫描仪(系统输入);
Catalog Catalog=新目录();
布尔值endCatalog=false;
而(!endCatalog)
{
System.out.println(“请选择并选择:\n”
+“1-显示目录的所有项目\n”
+“2-按关键字显示项目\n”
+“3-将项目添加到目录\n”
+“4-从目录中删除项目\n”
+“5-更改目录中一个项目的成本\n”
+“6-按百分比更改目录中所有项目的成本\n”
+“7-退出”);
int choice=in.nextInt();
开关(选择){
案例1:System.out.println(catalog.displayAll());break;
案例2:System.out.println(“显示关键字”);中断;
案例3:System.out.println(“添加项:\n输入ID:”);
int newId=in.nextInt();
System.out.println(“输入说明:”);
字符串newDesc=in.next();
系统输出打印项次(“输入成本:”;
double newCost=in.nextDouble();
add(newId、newDesc、newCost);break;
案例4:System.out.println(“删除项”);中断;
案例5:System.out.println(“一项变更成本”);中断;
案例6:System.out.println(“按%”更改成本);中断;
案例7:endCatalog=true;break;}
}   
}
}
类目录
{
最终静态int MAX=100;
私有目录项[]目录项;
国际使用;
公共目录()
{
catalogItems=新CatalogItem[MAX];
}   
公共作废添加(CatalogItem新建项)
{
inUse=0;
如果(使用以下是问题:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}
新建项目创建后会发生什么情况?

问题如下:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}

新建项目创建后会发生什么情况?

没有项目添加到:

private CatalogItem[] catalogItems;
这是因为您只调用此方法:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}
而且该方法永远不会调用实际尝试向数组添加内容的方法:

   public void add(CatalogItem newItem)
    {
        inUse = 0;
        if(inUse<MAX) {
            catalogItems[inUse] = newItem;
            inUse++; }
    }
public void添加(CatalogItem newItem)
{
inUse=0;

如果(使用时)没有添加任何项目到:

private CatalogItem[] catalogItems;
这是因为您只调用此方法:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}
而且该方法永远不会调用实际尝试向数组添加内容的方法:

   public void add(CatalogItem newItem)
    {
        inUse = 0;
        if(inUse<MAX) {
            catalogItems[inUse] = newItem;
            inUse++; }
    }
public void添加(CatalogItem newItem)
{
inUse=0;

如果(使用调用此方法来添加目录项:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}
但正如我们所看到的,这实际上与它创建的对象没有任何关系。你的意思是让这个重载的
add()
调用另一个吗?这将是一个很好的设计

另外,在另一个版本的
add()
中,您可以执行以下操作:

    inUse = 0;

由于每次调用
add()
时都会重置
inUse
,因此数组中永远不会包含多个项。您知道这是为什么吗?您应该将这一行取出。

调用此方法来添加目录项:

public void add(int newId, String newDesc, double newCost)
{
    CatalogItem newItem = new CatalogItem(newId, newDesc, newCost);

}
但正如我们所看到的,这实际上与它创建的对象没有任何关系。你的意思是让这个重载的
add()
调用另一个吗?这将是一个很好的设计

另外,在另一个版本的
add()
中,您可以执行以下操作:

    inUse = 0;

由于每次调用
add()
时都会重置
inUse
,因此数组将永远不会包含多个项。你知道为什么吗?你应该去掉这一行。

是的,我对数组很困惑,所以我改为使用ArrayList。现在我有了…public Catalog(){ArrayList catalogItems=new ArrayList(MAX);}公共空添加(int-newId,String-newDesc,double-newCost){CatalogItem-newItem=new-CatalogItem(newId,newDesc,newCost);}公共空添加(CatalogItem-newItem){catalogItems.add(newItem);}因此,正在将newItem添加到数组中。我仍然对访问ArrayList的元素感到有点困惑。如果我这样做,我将如何操作这些项?使用
ArrayList而不是原始数组很好。但是仍然存在一个问题:在
add(int,String double)中
method您实例化了一个新的
CatalogItem
,但实际上并没有对它做任何操作。首先在伪代码中考虑它:1)创建一个新项目2)将它添加到列表中。现在确保您的代码能做到这一点。是的,我对数组非常困惑,所以我切换到使用ArrayList。现在我有了…public Catalog(){ArrayList catalogItems=new ArrayList(MAX);}公共空添加(int-newId,String-newDesc,double-newCost){CatalogItem-newItem=new-CatalogItem(newId,newDesc,newCost);}公共空添加(CatalogItem-newItem){catalogItems.add(newItem);}因此,正在将newItem添加到数组中。我仍然对访问ArrayList的元素感到有点困惑。如果我这样做,我将如何操作这些项?使用
ArrayList而不是原始数组很好。但是仍然存在一个问题:在
add(int,String double)中
method您实例化了一个新的
CatalogItem
,但实际上并没有对其执行任何操作。请首先在伪代码中考虑它:1)创建一个新项目2)将其添加到列表中。现在,请确保您的代码做到了这一点。