所以我正在为处理ArrayLists的AP计算机科学课做作业。对于#13和14,我应该将每个ArrayList元素递增0到20之间的随机数(包括0和20)。我不明白为什么我不能使用(ArrayList.set())方法来增加我的ArrayList元素。提前谢谢!
import java.util.Collection; //Driver Class
import java.util.Random;
import java.util.ArrayList;
import java.util.Random;
public class MusicDownloads {
public static void main(String[] args) {
ArrayList < DownloadInfo > music = new ArrayList < DownloadInfo > ();
music.add(new DownloadInfo("So What")); //2
music.add(new DownloadInfo("Blue in Green"));
music.add(new DownloadInfo("Night in Tunisia"));
music.add(new DownloadInfo("Fly Me to the Moon"));
music.add(new DownloadInfo("Come Fly With Me"));
music.add(new DownloadInfo("This Town"));
music.add(new DownloadInfo("Flamenco Sketches"));
int addNum = 0;
Random rand = new Random();
for (int i = 0; i < music.size(); i++) {
addNum = 0;
addNum = (int) Math.random() * 20; //13
music.set(i, music.get(i).addNumDL(addNum));
}
System.out.println("Num 13/14");
for (int i = 0; i < music.size(); i++) {
System.out.println(music.get(i)); //14
}
}
}
public class DownloadInfo //Object Class
{
private String title = "";
private int numDownloads = 0;
public DownloadInfo(String t) {
title = t;
}
public String getSongTitle() {
return title;
}
public void addNumDL(int addNum) {
numDownloads = addNum + numDownloads;
}
public int getnumDownloads() {
return numDownloads;
}
public String toString() {
return ("Song title: <" + title + "> " + " <Number of times downloaded: " + numDownloads + ">");
}
}
答案 0 :(得分:1)
您应该add(…)
元素而不是set(i, …)
。
除此之外,还有一些风格的挑剔:
nextInt(int)
方法。你甚至可以在上面实例化一个随机数。答案 1 :(得分:1)
如果您只是尝试在代码片段中显示的DownloadInfo对象中增加计数器,那么您不需要替换数组中的元素。你可以简单地使用:
public static void main(String[] args)
{
ArrayList<DownloadInfo> music = new ArrayList<DownloadInfo>();
music.add(new DownloadInfo("Wasted Years"));
music.add(new DownloadInfo("The Trooper"));
music.add(new DownloadInfo("Can I Play with Madness"));
music.add(new DownloadInfo("22 Acacia Avenue"));
music.add(new DownloadInfo("Rime of the Ancient Mariner"));
for (int i=0; i<music.size(); i++)
{
int addNum = (int) (Math.random() * 20);
music.get(i).addNumDL(addNum);
}
System.out.println("Num 13/14");
for (int i=0; i<music.size(); i++)
{
System.out.println(music.get(i)); //14
}
}
注意(Math.random()* 20)周围的括号。如果你不使用这些,那么int cast应用于Math.random()的结果,你最终得到很多0结果。
在上面的代码中,当你使用set时,addNumDL的结果不是DownloadInfo对象,所以我假设你在那里遇到编译问题,因为你试图在数组中设置一个void。至少这是我在本地建立你的课时得到的。如果我误解了你并且你试图在ArrayList中移动对象,我们可以从那里去。