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