【发布时间】:2015-02-26 00:34:52
【问题描述】:
我正在尝试修改 Warehouse 类中的 toString 方法,以便它返回
Bin B0:
Dress Shoe - Loafer (size 10-1/2), SKU 1234-13: 5
Boot - Riding (size 8), SKU 1234-5: 5
Bin B1:
Bin B2:
Dress Shoe - Wing-tip (size 10), SKU 1234-3: 10
Bin B3:
Casual Shoe - Sandal (size 9-1/2), SKU 1234-0: 8
Bin B4:
我的主班
public static void main( String[] args )
{
Warehouse w = new Warehouse( 10 );
Footwear d0 = new DressShoe( "Loafer", 10.5, "1234-13" );
Footwear b = new Boot( "Riding", 8, "1234-5" );
Footwear c = new CasualShoe( "Sandal", 9.5, "1234-0" );
Footwear d1 = new DressShoe( "Wing-tip", 10, "1234-3" );
w.stockWarehouse( d0, 5, "B0" );
w.stockWarehouse( b, 5, "B0" );
w.stockWarehouse( c, 8, "B3" );
w.stockWarehouse( d1, 10, "B2" );
System.out.println( w.toString() );
}
stockWarehouse 方法是“隐藏的”并且没有给出。 DressShoe、Boot、CasualShoe 和 DressShoe 是鞋类的扩展类。
Footwear 是一个接受 String 样式、double size 和 String SKU 的类。它的 toString 方法返回鞋子信息如:
Dress Shoe - Loafer (size 10-1/2), SKU 1234-13
Bin是一个类,它接受String名称并创建一个ArrayList的内容,它的toString方法返回Bin号和内容如:
[SKU 1234-13: 5, SKU 1234-13: 5]
这是我的仓库类。
public class Warehouse {
private int myBinMax;
private ArrayList<Footwear> myCatalog;
private ArrayList<Bin> myBins;
public Warehouse (int binMax)
{
myBinMax = binMax;
myCatalog = new ArrayList<Footwear>();
myBins = new ArrayList<Bin>(5);
for(int i=0; i<5; i++)
{
addBin();
}
}
public void addBin()
{
myBins.add( new Bin( "B" + myBins.size() ) );
}
@override
public String toString()
{
String b0 = myBins.get(0).getName() + "\n" +
myCatalog.get(0).toString() + ", " + myBins.get(0).getContents().get(1) + "\n";
int b0size = myBins.get(0).getContents().size();
return b0size + b0;
}
}
EDIT 添加了鞋类
public class Footwear
{
private String myStyle;
private double mySize;
private String mySKU;
public Footwear ( String style, double size, String SKU)
{
myStyle = style;
mySize = size;
mySKU = SKU;
}
public String getStyle()
{
return myStyle;
}
public double getSize()
{
return mySize;
}
public String getSKU()
{
return mySKU;
}
public String getType()
{
return "Unspecified";
}
public String printSize()
{
int x = (int)(getSize());
if (getSize() % x == 0.5)
return getStyle() + " (size " + x + "-1/2)";
else
return getStyle() + " (size " + x + ")";
}
public String toString()
{
int x = (int)(getSize());
String ShoeInfo = "";
if (getSize() % x == 0.5)
ShoeInfo = getStyle() + " (size " + x + "\u00bd" + ")";
else
ShoeInfo= getStyle() + " (size " + x + ")";
if (!(getType().equals("Unspecified")))
return getType() + " - " + ShoeInfo;
else
return ShoeInfo;
}
}
【问题讨论】:
-
能展示一下Bin类的代码吗?
-
对于 toString,您可以按照需要的顺序添加所需的位。没有什么魔法可以做到这一点。
-
@Eran,确定我已经添加了 Bin 类。
-
问题似乎出在您的
BinItem's toString()方法和您的仓库的toString()。当您仅使用索引 0 时,我个人无法理解您希望如何显示所有 BINS:int x = 0; binsOut = myBins.get(x).toString(); catOut = myCatalog.get(x).toString(); -
不清楚 myCatalog 列表和 myBins 列表之间的关系,但如果 Bin 的 toString 没有返回 Warehouse 的 toString 所需的输出,请不要使用它。您可以访问 Bin 实例的属性(使用 getName 和 getContents)并根据需要对其进行格式化。