如何更改列表列表中的元素Java

时间:2017-01-28 00:43:03

标签: java list arraylist

这是我的代码,我正在制作一个5x5的网格,每个部分都设置了随机颜色。我需要将列表中指定的y_loc和x_loc设置为随机选择的颜色,除非我无法找到方法。它应该是第二个没有像id一样运行的最后一行。我知道我可以在更长的代码中执行此操作,但在较少的情况下执行它会很好。

//making the map
    ArrayList<ArrayList<String>> fullmap = new ArrayList<ArrayList<String>>();
    ArrayList<String> y_row_0 = new ArrayList<String>();
    ArrayList<String> y_row_1 = new ArrayList<String>();
    ArrayList<String> y_row_2 = new ArrayList<String>();
    ArrayList<String> y_row_3 = new ArrayList<String>();
    ArrayList<String> y_row_4 = new ArrayList<String>();
//adding each row
    fullmap.add(y_row_0);
    fullmap.add(y_row_1);
    fullmap.add(y_row_2);
    fullmap.add(y_row_3);
    fullmap.add(y_row_4);
    Random rn = new Random();
    //loop to randomly pick colors then set them to their destined locations
    for (int y_loc = 0; y_loc < 6; y_loc++){
        for (int x_loc = 0; x_loc < 6; x_loc++){
            colorPicked = false;
            while (!colorPicked){
                int ranNum = rn.nextInt();
                if (ranNum ==0){
                    if (redTot < 5) {
                        redTot += 1;
                        fullmap.set(y_loc).set(x_loc, "Red"));
                        colorPicked = true;

4 个答案:

答案 0 :(得分:0)

你应该有这样的东西:

fullmap.get(y_loc).set(x_loc, "Red"));

注意&#34; get&#34;。你是&#34;得到&#34; y位置的列表,返回一个数组列表,然后调用&#34; set&#34;针对该数组列表设置&#34; x_loc&#34;的索引中的实际值值。

答案 1 :(得分:0)

由于此处列表中有列表,要在特定位置设置内容,您必须get内部列表,然后对其执行set。 以下应该有效:

fullmap.get(y_loc).set(x_loc, "Red"));

此外,由于您似乎总是有5x5矩阵,我建议使用双数组。那就是那条线:

fullmap[x_loc][y_loc] = "Red";

答案 2 :(得分:0)

您需要进行一些更改:

  • 在声明子列表时,您需要确保它们有5个空/空元素。否则set会抛出IndexOutOfBoundsException。例如。你需要声明这样的列表:

    ArrayList<String> y_row_0 = Arrays.asList(new String[5]);//Assuming it will have 5 elements

  • 在设置元素时,首先需要get相应的子列表,例如以下内容需要更改:

    fullmap.set(y_loc).set(x_loc, "Red"));

    fullmap.get(y_loc).set(x_loc, "Red"));

答案 3 :(得分:0)

其他人已经讨论过索引问题。除此之外,我相信您的条件可能没有按预期执行。 nextInt()将返回一个合理的统一随机数,范围为-2147483648到2147483647.您有一个1/2 ^ 64的机会获得0。将随机数范围减少到更合理的范围。例如,nextInt(10)将返回0到9之间的随机数。

此外,如果概率太低,你将不会一直得到5个红色。为了保证5个选择并且为了计算效率,最好随机选择数组索引并评估是否设置了颜色,例如以下伪代码

    int redTot = 0;
    while ( redTot < 5 ) {
        int r = rn.nextInt( 5 );
        int c = rn.nextInt( 5 );
        String color = fullmap.get( r ).get( c );
        if ( color == null ) {
            fullmap.get( r ).set( c, "Red" );
            redTot++;
        }
    }