gpt4 book ai didi

嵌套for循环的Java重复输出

转载 作者:行者123 更新时间:2023-12-01 13:18:18 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我创建了这个包,问题是当它运行时它在箱之间重复相同的目录条目。
我认为问题出在detailedInventory 方法中。
应该是:它应该为 Bin B 创建一个新的随机 bin 项目(类型、标题、艺术家),而不是使用 Bin A 中的相同元素。除此之外,输出是正确的。 SKU 编号已正确生成和显示。

**i 的值,当它们对应于目录时,是对象。它们实际上是不同类型的物理媒体,例如 DVD 或磁带,具有标题、艺术家和 SKU 属性。

***虽然看起来没有意义,但数据应该是随机生成的。 (此类是说明继承的更大概念/类(class)的一部分。)

任何帮助将不胜感激!

这是我看到的输出:

Bin A:DVD - Greatest Hits Volume 2 (Limp Bizkit), SKU 1234-0: 500Cassette - The Best Of (Michael Jackson), SKU 1234-1: 25DVD - Love Songs (Michael Jackson), SKU 1234-2: 7720
Bin B:DVD - Greatest Hits Volume 2 (Limp Bizkit), SKU 1234-3: 1000

The bin item under Bin B should not be the same as A.

public class testMusicMedia
{
public static ArrayList<MusicMedia> MakeMusicCatalog( int size )
{
String[] titles =
{
"Greatest Hits Volume 1", "Greatest Hits Volume 2",
"The Best Of", "Love Songs",
"The Early Years", "The Later Years"
};
String[] artists =
{
"Michael Jackson", "Eminem",
"The Beatles", "Shania Twain",
"Limp Bizkit"
};
ArrayList<MusicMedia> catalog = new ArrayList<MusicMedia>();
Random rn = new Random();
for ( int i = 0 ; i < size ; i++ )
{
MusicMedia m;
int mediatype = rn.nextInt( 3 );
String title = titles[ rn.nextInt( titles.length ) ];
String artist = artists[ rn.nextInt( artists.length ) ];
String sku = "1234-" + i;
if ( mediatype == 0 )
m = new CompactDisk( title, artist, sku );
else if ( mediatype == 1 )
m = new DigitalVideoDisk( title, artist, sku );
else
m = new CassetteTape( title, artist, sku );
catalog.add( m );
}
return catalog;
}

public static String lookupMedia( ArrayList<MusicMedia> catalog,
String sku )
{
for ( MusicMedia m : catalog )
{
if ( m.getSKU().equals( sku ))
return "SKU is in catalog";
}
return "SKU not in catalog";
}

public static String detailedInventory( ArrayList<MusicMedia> catalog, ArrayList<Bin> warehouse )
{
String s = "";
for ( Bin bn : warehouse ){
s += "Bin " + bn.getName() + ":\n";
for (int i = 0; i < bn.getContents().size(); i++){
s += catalog.get(i) + ", " + bn.getContents().get(i) + "\n";
}
}
s += "\n";
return s;
}

public static void main( String[] args )
{
ArrayList<MusicMedia> catalog = MakeMusicCatalog( 10 );
ArrayList<Bin> warehouse = new ArrayList<Bin>();
Bin a = new Bin( "A" );
Bin b = new Bin( "B" );
warehouse.add( a );
warehouse.add( b );
a.add( new BinItem( "1234-0", 500 ) );
a.add( new BinItem( "1234-1", 25 ) );
a.add( new BinItem( "1234-2", 7720 ) );
b.add( new BinItem( "1234-3", 1000 ) );
System.out.println( detailedInventory( catalog, warehouse ) );
}
}

我将一个 bin 中共享相同 SKU 的所有项目的集合称为“bin item”。 Bin 类的每个对象(未显示)代表一个假装仓库中的一个 bin。 Bin 对象有两个实例变量:一个包含 bin 名称的 String 和一个 ArrayList,其中包含存储在 bin 中的每个 SKU 的 BinItem。 Bin 类的 toString 方法使用 BinItem 类的 toString 方法。它生成仅涉及 SKU 和数量的列表。

此方法应使用 for-each 循环循环遍历仓库中的所有 bin。对于每个 bin,s 应由字符串 "Bin"扩展,后跟 bin 的名称,后跟冒号和\n 以开始新行。然后它应该循环遍历当前 bin 中的所有 bin 项,对于每个
将 s 扩展为一个新的文本行,该文本以在输入目录中查找当前 bin 项的 SKU 的结果开始,并以逗号后跟 bin 项的 String 表示形式继续。

输出应如下所示:
Bin A:CD - The Later Years (Shania Twain), SKU 1234-0: 500Cassette - Greatest Hits Volume 2 (The Beatles), SKU 1234-1: 25Cassette - Greatest Hits Volume 1 (Shania Twain), SKU 1234-2: 7720
Bin B:Cassette - Greatest Hits Volume 2 (Michael Jackson), SKU 1234-3: 1000

Full code:

public class MusicMedia
{
private String myTitle,
myArtist,
mySKU;

public MusicMedia( String title, String artist, String sku )
{
myTitle = title;
myArtist = artist;
mySKU = sku;
}
public String getTitle()
{
return myTitle;
}
public String getArtist()
{
return myArtist;
}
public String getMediaType()
{
return "Unknown";
}
public String getSKU()
{
return mySKU;
}
public String toString()
{
return " - " + getTitle() + " (" + getArtist() + ")";
}
}


public class Disk extends MusicMedia
{
/**
* Constructor for objects of class Disk
*/
public Disk( String title, String artist, String sku )
{
super(title, artist, sku);
}

public String getMediaType()
{
return "Disk";
}

public String toString()
{
return getMediaType() + super.toString();
}
}

我还有一个相同的 CassetteTape 类,它也扩展了 MusicMedia。还有另外两个磁盘子类,称为 CompactDisk 和 DigitalVideoDisk。这两个也几乎相同,所以我在下面粘贴了DVD类。
public class DigitalVideoDisk extends Disk
{
/**
* Constructor for objects of class DigitalVideoDisk
*/
public DigitalVideoDisk( String title, String artist, String sku )
{
super(title, artist, sku);
}

public String getMediaType()
{
return "DVD";
}
}
public class BinItem
{
private String mySKU;
private int myQuantity;
public BinItem( String sku, int quantity )
{
mySKU = sku;
myQuantity = quantity;
}
public String getSKU()
{
return mySKU;
}
public int getQuantity()
{
return myQuantity;
}
public String toString()
{
return "SKU " + getSKU() + ": " + getQuantity();
}
}

public class Bin
{
private String myName; //bin name
private ArrayList<BinItem> myContents; //contains a binItem
public Bin( String name )
{
myName = name;
myContents = new ArrayList<BinItem>();
}
public String getName()
{
return myName;
}
public ArrayList<BinItem> getContents()
{
return myContents;
}
public void add( BinItem b )
{
myContents.add( b );
}
public String toString()
{
String s = "Bin " + myName + ":\n";
for ( BinItem b : myContents )
s += b + "\n";
return s;
}
}

最佳答案

好的,根据您的编辑:

...the result of looking up the current bin item’s SKU in the input catalog...



您现在没有这样做,这是我们需要了解程序应该做什么的关键点。现在你只是从 catalog 中检索一个元素使用 i ,基本上是任意的。

因此,您需要做的第一件事是创建一个搜索 catalog 的辅助方法。对于某个 SKU 的 MusicMedia 对象。你有一个非常相似的方法,叫做 lookupMedia所以我刚刚将它修改为这个略有不同的规范。这将返回 m而不是字符串值:
public static MusicMedia getMediaBySKU(
ArrayList<MusicMedia> catalog, String sku
) {
for ( MusicMedia m : catalog ) {
if ( m.getSKU().equals(sku) )
return m;
}
return null;
}

现在您可以根据 SKU 检索商品,您可以修改 detailedInventory循环使用它:
for ( Bin bn : warehouse ){
s += "Bin " + bn.getName() + ":\n";

for ( BinItem item : bn.getContents() ){
MusicMedia mm = getMediaBySKU(catalog, item.getSKU());

s += mm + ", " + item + "\n";
}
}

(不知道如何从 BinItem 获取 SKU,所以我猜想但我希望你明白。如果你还没有返回 SKU 的方法,你可能需要做一个。)

关于嵌套for循环的Java重复输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22277928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com