2014-03-12 3 views
2

어댑터에 할당하기 전에 랜덤 함수를 사용하여 배열에 저장된 이미지를 임의로 뒤섞어 야 할 Android 애플리케이션을 개발 중입니다. 나는 배열 이미지를 셔플하는 방법에 대한 다음과 같은 코드를 가지고 있지만, 그것은 오류를Shuffle Array images in android

MainActivity.java 발생 :

public class MainActivity extends Activity { 
    Context ctx; 
    boolean flage=false; 
    int img1=-1,img2=-1; 
    public int OriginalArray[] = { R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3,R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3 }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     shuffleArray(); 
     final GridView grid = (GridView) findViewById(R.id.gv_memory); 
     grid.setAdapter(new GridViewContent(this)); 
    } 
    private void shuffleArray() { 
     // TODO Auto-generated method stub 
     Random arrayRandom= new Random(); 
     for(int i=0; i<OriginalArray.length-1; i++){ 
      int index=arrayRandom.nextInt(i); 
      OriginalArray[i]=OriginalArray[index]; 

     } 

    } 
    public class GridViewContent extends BaseAdapter { 
     private Context context; 

     public int pictureArray[]={ 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question, 
       R.drawable.question,   
     }; 
     public GridViewContent(Context c){ 
      context=c; 

     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return (pictureArray.length); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return pictureArray[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(final int position, View arg1, ViewGroup arg2) { 
      // TODO Auto-generated method stub 
      final ImageView myimage=new ImageView(context); 
      myimage.setImageResource(pictureArray[position]); 
      myimage.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
      myimage.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      myimage.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        //Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show(); 
       myimage.setImageResource(OriginalArray[position]); 

       if(flage==false) 
       { 

       img1=OriginalArray[position]; 

       flage=true; 

       }else if(flage==true){ 

       img2=OriginalArray[position]; 
       checkResult(); 
       flage=false; 
       } 
       //else if(f) 
       } 
      }); 

      return myimage; 
     } 

    } 
    public void checkResult() { 
     if(img1==img2) 
     { 
      Toast.makeText(MainActivity.this, "Congratualatin !!!!", Toast.LENGTH_LONG).show(); 
     } 
     else{ 
      Toast.makeText(MainActivity.this, "Sorry!!!!", Toast.LENGTH_LONG).show(); 
      final GridView grid = (GridView) findViewById(R.id.gv_memory); 
      grid.setAdapter(new GridViewContent(this)); 
     } 

    } 
}  

로그 캣을 ......

03-12 05:40:31.904: D/dalvikvm(1081): GC_FOR_ALLOC freed 58K, 8% free 2771K/3000K, paused 198ms, total 201ms 
03-12 05:40:31.914: I/dalvikvm-heap(1081): Grow heap (frag case) to 3.943MB for 1127536-byte allocation 
03-12 05:40:31.965: D/dalvikvm(1081): GC_FOR_ALLOC freed 2K, 6% free 3870K/4104K, paused 47ms, total 47ms 
03-12 05:40:32.014: D/AndroidRuntime(1081): Shutting down VM 
03-12 05:40:32.014: W/dalvikvm(1081): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
03-12 05:40:32.024: E/AndroidRuntime(1081): FATAL EXCEPTION: main 
03-12 05:40:32.024: E/AndroidRuntime(1081): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.memoryforkids/com.example.memoryforkids.MainActivity}: java.lang.IllegalArgumentException: n <= 0: 0 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.os.Looper.loop(Looper.java:137) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at java.lang.reflect.Method.invoke(Method.java:525) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at dalvik.system.NativeStart.main(Native Method) 
03-12 05:40:32.024: E/AndroidRuntime(1081): Caused by: java.lang.IllegalArgumentException: n <= 0: 0 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at java.util.Random.nextInt(Random.java:175) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at com.example.memoryforkids.MainActivity.shuffArray(MainActivity.java:47) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at com.example.memoryforkids.MainActivity.onCreate(MainActivity.java:38) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.Activity.performCreate(Activity.java:5133) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
03-12 05:40:32.024: E/AndroidRuntime(1081):  ... 11 more  
+0

배열에서 동일한 드로어 블을 사용하고 있습니다. 왜 셔플을하고 있습니까? –

+1

참조 Collections.shuffle – pskink

+0

@kalyanpvs : 사실 내가 키즈 게임을 위해이 코드를 사용하고 이미지 변경마다 위치를 바꾼다. –

답변

2

먼저 배열을 arraylist로 변환해야하고 Collection.shuffle()을 적용 할 수 있습니다.

아래 그림은 귀하의 int 그림 배열을 Integer의 arraylist로 변환합니다.

List<Integer> pictures = new ArrayList<Integer>(); 
for (int index = 0; index < OriginalArray.length; index++) 
{ 
    pictures.add(OriginalArray[index]); 
} 

그런 다음 Collection.shuffle()을 사용하십시오.

Collections.shuffle(pictures); 

이제 getView 방법에서는 다음과 같이 사용할 수 있습니다.

myimage.setImageResource(pictures.get(position));