Java 使用.add()和for循环将多个字符串对象从arraylist添加到数组
在这个方法中,我试图返回当前存储在MediaItem类型的arraylist(称为itemList)中的所有对象的字符串表示形式的常规数组。(我的代码之前的注释中也描述了这一点。)此方法是一个更大的MediaList项目的一部分,该项目包含几个子类,每个子类都是不同类型的媒体(歌曲、书籍、视频游戏等) 我的问题是,当我运行代码并试图打印字符串数组时,它只打印第一个字符串对象,即arraylist。我的循环只是将第一个MediaItem对象添加到字符串数组中,而不是循环并添加每个连续对象。为什么会这样 这是我的代码,以及教授给我们的说明:Java 使用.add()和for循环将多个字符串对象从arraylist添加到数组,java,arrays,arraylist,Java,Arrays,Arraylist,在这个方法中,我试图返回当前存储在MediaItem类型的arraylist(称为itemList)中的所有对象的字符串表示形式的常规数组。(我的代码之前的注释中也描述了这一点。)此方法是一个更大的MediaList项目的一部分,该项目包含几个子类,每个子类都是不同类型的媒体(歌曲、书籍、视频游戏等) 我的问题是,当我运行代码并试图打印字符串数组时,它只打印第一个字符串对象,即arraylist。我的循环只是将第一个MediaItem对象添加到字符串数组中,而不是循环并添加每个连续对象。为什么会
/** TODO 11: implement this method.
* This method returns an array of the String representation of all of
* the MediaItem objects that are currently stored in the itemList.
* A String representation of a MediaItem is returned by calling its
toString() method.
* The array returned may not contain any NULL values. This method returns
an array of
* length 0 if the itemList is empty.
**/
public String[] getItemListAsStringArray(){
ArrayList<String> itemListAsString = new ArrayList<String>();
for (int i = 0; i < itemList.size(); i++) {
itemListAsString.add(itemList.get(i).toString());
String[] stringArray = itemListAsString.toArray(new String[0]);
if (stringArray.length == 0) {
return stringArray;
}
else {
itemListAsString.add(itemList.get(i).toString());
return stringArray;
}
}
String[] stringArray = itemListAsString.toArray(new String[0]);
return stringArray;
}
/**TODO 11:实现此方法。
*此方法返回所有属性的字符串表示形式的数组
*当前存储在itemList中的MediaItem对象。
*MediaItem的字符串表示形式通过调用其
toString()方法。
*返回的数组不能包含任何空值。此方法返回
一系列
*如果itemList为空,则长度为0。
**/
公共字符串[]getItemListAsStringArray(){
ArrayList itemListAsString=新建ArrayList();
对于(int i=0;i
我必须创建一个新的arraylist来添加对象,因为原始arraylist的类型为。然后,我必须将arraylist(我将其命名为“itemListAsString”)转换为一个正则数组,以便能够在方法末尾返回它(我与我的教授进行了检查,我们应该转换为正则数组)
我尝试使用调试器,看起来代码添加了第一个对象,然后循环尝试再次添加完全相同的对象。然后它将退出循环。既然我使用的是for循环,那么代码是否应该转移到arraylist中的下一个对象,而不是尝试添加相同的对象 我更正了我的代码谢谢你的帮助,这是更正后的代码:
public String[] getItemListAsStringArray(){
ArrayList<String> itemListAsString = new ArrayList<String>();
for (int i = 0; i < itemList.size(); i++) {
itemListAsString.add(itemList.get(i).toString());
}
String[] stringArray = itemListAsString.toArray(new String[0]);
return stringArray;
}
public字符串[]getItemListAsStringArray(){
ArrayList itemListAsString=新建ArrayList();
对于(int i=0;i
我更正了我的代码谢谢你的帮助,这是更正后的代码:
public String[] getItemListAsStringArray(){
ArrayList<String> itemListAsString = new ArrayList<String>();
for (int i = 0; i < itemList.size(); i++) {
itemListAsString.add(itemList.get(i).toString());
}
String[] stringArray = itemListAsString.toArray(new String[0]);
return stringArray;
}
public字符串[]getItemListAsStringArray(){
ArrayList itemListAsString=新建ArrayList();
对于(int i=0;i
这里有一种更现代的方法来做同样的事情:
public String[] getItemListAsStringArray() {
return itemList.stream()
.filter(Objects::nonNull)
.map(Object::toString)
.toArray(String[]::new);
}
它们在功能上是等价的,但这种方式有函数式编程的一些优点和缺点。基本上:以这种方式编写的代码通常不太容易出错,但这是有代价的。这里有一种更现代的方法来做同样的事情:
public String[] getItemListAsStringArray() {
return itemList.stream()
.filter(Objects::nonNull)
.map(Object::toString)
.toArray(String[]::new);
}
它们在功能上是等价的,但这种方式有函数式编程的一些优点和缺点。基本上:以这种方式编写的代码通常不太容易出错,但这是有代价的。什么是
itemList
?它的长度是0吗?@jiveturkey正如我提到的,itemList是MediaItem类型的arraylist。它没有指定的长度。您将在循环内而不是在循环后返回,因此在将第一项添加到列表后立即返回数组。@DavidConrad oh jeez,好的,谢谢。所以我应该去掉循环中的return语句,并在最后保留它之外的语句?编辑:所以我想我根本不需要if/else语句?代码似乎在没有它们的情况下正常工作。是的,您现在已经找到了。什么是itemList
?它的长度是0吗?@jiveturkey正如我提到的,itemList是MediaItem类型的arraylist。它没有指定的长度。您将在循环内而不是在循环后返回,因此在将第一项添加到列表后立即返回数组。@DavidConrad oh jeez,好的,谢谢。所以我应该去掉循环中的return语句,并在最后保留它之外的语句?编辑:所以我想我根本不需要if/else语句?代码在没有它们的情况下似乎可以正常工作。是的,您现在已经知道了。谢谢。我希望我的教授也教过我们,它看起来比我写的要干净得多。不,你很好。你的方法肯定仍然有效,而且可能更有效(尽管我会从基于索引的循环切换到)是的,我使用常规for循环,因为我对它们比for/each更熟悉,但它们看起来不那么杂乱,仍然有效。谢谢。我希望我的教授也教过我们,它看起来比我写的要干净得多。不,你很好。你这样做的方式肯定仍然有效,而且可能更有效(尽管我会从基于索引的循环切换到)是的,我使用常规for循环,因为我对它们比for/each循环更熟悉,但这些循环看起来不那么杂乱,仍然有效。