按随机数递增ArrayList元素

时间:2015-02-12 15:15:02

标签: java random arraylist

所以我正在为处理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 + ">");
    }
}

2 个答案:

答案 0 :(得分:1)

您应该add(…)元素而不是set(i, …)

除此之外,还有一些风格的挑剔:

  • 如果需要整数,请不要使用Math.random()。而是创建一个Random(或使用ThreadLocalRandom,如果您使用的是1.7或更高版本)并使用其nextInt(int)方法。你甚至可以在上面实例化一个随机数。
  • Java有一个+ =运算符,用于更新值。

答案 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中移动对象,我们可以从那里去。