我正在尝试制作一个新程序,其中有一个名为GroceryItem的类,第二个是GroceryList,第三个是MAIN方法,其中我想要使用的所有项目都是。
我已经制作数组以将这些项目放在那里,但是当我尝试打印这些项目时,只有文件名出来而不是项目而没有别的,请帮助。
这是我的代码:
GROCERYITEM:
public class GroceryItem {
private String name;
private int quantity;
private double pricePerUnit;
public GroceryItem(int quantity, String name, double pricePerUnit) {
setName(name);
setQuantity(quantity);
setPriceperUnit(pricePerUnit);
}
public void setName(String name) {
this.name = name;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public void setPriceperUnit(double pricePerUnit) {
this.pricePerUnit = pricePerUnit;
}
public String getName() {
return name;
}
public int getQuantity() {
return quantity;
}
public double getPricePerUnit() {
return pricePerUnit;
}
public double getCost() {
return quantity * pricePerUnit;
}
}
GROCERYLIST:
import java.util.*;
public class GroceryList {
private GroceryItem item [];
private int totalItems;
public GroceryList() {
this(10);
}
public GroceryList(int itemsOnList) {
item = new GroceryItem[itemsOnList];
}
// Constructs a new empty grocery list.
public boolean addItem(GroceryItem items) {
boolean added = false;
try {
item[totalItems] = items;
++totalItems;
added = true;
}catch (Exception e) {
added = false;
}
return added;
}
public String toString(){
String retuurn = "";
for (GroceryItem items : item) {
if(items != null){
retuurn += item.toString() + "\n";
}
}
return retuurn;
}
}
MAIN:
import java.util.Arrays;
public class GroceryItemList {
public static void main(String[] args) {
System.out.println("Quantity: " + "Name: " + "Price Per Unit: "
+ " Total:");
GroceryItem rice = new GroceryItem(1, "Rice", 5.00);
GroceryItem fish = new GroceryItem(2, "Fish", 9.50);
GroceryItem cake = new GroceryItem(3, "Cake", 5.00);
GroceryList liste = new GroceryList(10);
liste.addItem(rice);
liste.addItem(fish);
liste.addItem(cake);
System.out.println(liste.toString());
System.out.println("-----------------------------------------------");
}
}
答案 0 :(得分:1)
您在GroceryList
中使用了不直观的变量名称:
for (GroceryItem items : item) {
if(items != null){
retuurn += item.toString() + "\n";
}
}
您调用数组item
以及数组items
中的项目。这使你在
retuurn += item.toString() + "\n";
您应该使用
retuurn += items.toString() + "\n";
一旦超过此错误,您会发现每个项目仍然会收到神秘的字符串,因为您没有覆盖GroceryItem.toString()
,因此它已继承Object.toString()
,其行为与您目睹的一样。使用根据您的喜好生成字符串的方法覆盖GroceryItem.toString()
。
答案 1 :(得分:1)
对于每个循环,类GroceryList.In中toString()的更新很少,应该是items.toString()
@Override
public String toString(){
String retuurn = "";
for (GroceryItem items : item) {
if(items != null){
retuurn += **items**.toString() + "\n";
}
}
return retuurn;
}
还覆盖GroceryItem类中的toString()。希望这会有所帮助。
答案 2 :(得分:0)
要打印您需要的项目中的数据,就像在GroceryList中一样覆盖GroceryItem中的toString方法。
在GroceryItem中,添加以下内容以通过调用toString来打印GroceryItem的名称:
public String toString(){
return getName();
}
答案 3 :(得分:0)
默认的toString方法不知道您期望输出的方式。因此,默认行为是它打印类的类型,最可能是地址。如果您打算打印列表,则必须编写循环
这是您编写的用于覆盖toString的代码。您还在循环retuurn
retur
使用了不正确的可靠名称
public String toString(){
String retuurn = "";
for (GroceryItem items : item) {
if(items != null){
retuurn += item.toString() + "\n";
// Your variable name in your original question is retur, I'm assuming that as typo
}
}
return retuurn;
}
此代码的问题是它使用了您尚未创建的item.toString(),因此它使用默认的toString方法,该方法不知道要返回哪些数据。使用retuurn += item.getName()+"\n";
或者,您可以在GroceryItem.java中创建一个toString,它返回您想要返回的数据。示例代码如下。
public String toString(){ // inside GroceryItem.java
return this.name; // or return this.name & ";" & this.quantity; or what ever that should be returned.
}