循环从数组中随机显示图像(Android)

时间:2013-12-07 03:13:25

标签: java android arrays image random

我有一个包含5个图像的数组(R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four和R.drawable.five)。 以前,我的程序会从这些图像中随机选择5张图像并在屏幕上随机显示,没有任何错误。然后我添加了myImgCounttotalImgCount因为我想给每个图像一个int值。例如:R.drawable.one等于1,R.drawable.two等于2 ......等。然后,我希望我的for循环使用myImgCount跟踪放置的图像,然后运行直到totalImgCount等于50.我添加了myImgCount和{{1}后我现在有一个错误:

“11-26 18:22:16.750:E / AndroidRuntime(13971):致命异常:Thread-33401 E / AndroidRuntime(13971):java.lang.NullPointerException“

on totalImgCount

这是我到目前为止的代码:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), array1[i]);

我的代码的下一部分用于为图像提供int值:

public void surfaceCreated(SurfaceHolder holder) {

ArrayList<Integer> list = new ArrayList<Integer>();

    Random r = new Random();

    int[] images = new int[] { R.drawable.one, R.drawable.two,
        R.drawable.three, R.drawable.four, R.drawable.five };

    int totalImgCount = 0;


    for (int i = 0; i<50; i++)
    {
        while (true) 
        {
            int myImgCount = r.nextInt(5);

                 totalImgCount += myImgCount + 1;

            if (totalImgCount<50) {

                list.add(images[myImgCount]);   //do it again if not yet at 50
                break;
            }
                   totalImgCount -= (myImgCount + 1);
        }

    }

    array1 = convertIntegers(list);

    }

在收到此错误之前,我的程序将无错运行并在屏幕上显示5个随机图像。正如我上面提到的,我正在尝试创建一个循环,一直显示随机图像,直到图像的总和为50.如果您需要更多信息,请告诉我!我感谢任何帮助,并提前感谢!

编辑:遗漏了我的public static int[] convertIntegers(List<Integer> integers) { int[] ret = new int[integers.size()]; Iterator<Integer> iterator = integers.iterator(); for (int i = 0; i < ret.length; i++) { ret[i] = iterator.next().intValue(); } return ret; } 方法,我收到错误:

render

1 个答案:

答案 0 :(得分:1)

听起来你并没有将随机数限制在数组索引(0-4)。 从这开始,将你的数字限制在0到4之间。

    int range = images.length-1;        
    int myImgCount = 0;

    Random random = new Random();
    for( int i = 0; i < 50; ++i)
    {
        myImgCount = random.nextInt(range);
        list.add(images[myImgCount]);
    }

调整渲染方法,看看这是否有帮助:

    if (canvas != null)
    {             
         Random random = new Random();
         canvas.drawRGB(234, 237, 235);

         //iterate over your integer array
         //there should be 50 resource ids available
         for(int resourceId : array1)
         {
               Bitmap bmp = BitmapFactory.decodeResource(getResources(), resourceId);
               //This is where I am currently getting the error
               canvas.drawBitmap(bmp, 
                     random.nextInt(canvas.getWidth()-bmp.getWidth()), 
                     random.nextInt(canvas.getHeight()-bmp.getHeight()), null);

         }    
     }

我还会更改以下内容:

for (int i = 0; i<50; i++)
{
    while (true) 
    {
        int myImgCount = r.nextInt(5);

             totalImgCount += myImgCount + 1;

        if (totalImgCount<50) {

            list.add(images[myImgCount]);   //do it again if not yet at 50
            break;
        }
               totalImgCount -= (myImgCount + 1);
    }

}

可能的改变:

 int i = 0;

 while(i < 50)
 {
      //calculate random resource ids from your resource array here and add them to your array1
      i++;
 }