这是我的代码,我正在制作一个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;
答案 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++;
}
}