2016-12-25 64 views
0

我正在創建一個基於隨機數組的輸出顯示(x)/ 5的應用程序。數組中有5個變量,它們生成一個介於0和1之間的數字。0是不好的,1是好的。如果他們說3/5,則活動切換到適當的活動。應用程序崩潰:Android Studio:使用If語句切換活動(INTENT)

12/24 20:28:53: Launching app 
$ adb push C:\Users\sam\Downloads\OracleTheDeciscionMaker\app\build\outputs\apk\app-debug.apk /data/local/tmp/app.com.example.android.oraclethedeciscionmaker 
$ adb shell pm install -r "/data/local/tmp/app.com.example.android.oraclethedeciscionmaker" 
Success 


$ adb shell am start -n "app.com.example.android.oraclethedeciscionmaker/app.com.example.android.oraclethedeciscionmaker.HomeScreen" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 
Client not ready yet..Waiting for process to come online 
Waiting for process to come online 
Connected to process 4122 on device emulator-5554 
W/System: ClassLoader referenced unknown path: /data/app/app.com.example.android.oraclethedeciscionmaker-2/lib/x86 
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
I/art: Background sticky concurrent mark sweep GC freed 21167(2MB) AllocSpace objects, 14(264KB) LOS objects, 0% free, 13MB/13MB, paused 3.199ms total 320.293ms 
I/art: Background partial concurrent mark sweep GC freed 2195(133KB) AllocSpace objects, 3(72KB) LOS objects, 23% free, 13MB/17MB, paused 3.735ms total 159.374ms 
I/OpenGLRenderer: Initialized EGL, version 1.4 
D/OpenGLRenderer: Swap behavior 1 
E/EGL_emulation: tid 4150: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb07fd4a0, error=EGL_BAD_MATCH 
I/Choreographer: Skipped 78 frames! The application may be doing too much work on its main thread. 
I/Choreographer: Skipped 72 frames! The application may be doing too much work on its main thread. 
D/AndroidRuntime: Shutting down VM 


        --------- beginning of crash 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: app.com.example.android.oraclethedeciscionmaker, PID: 4122 
        java.lang.IllegalStateException: Could not execute method for android:onClick 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
         at android.view.View.performClick(View.java:5637) 
         at android.view.View$PerformClick.run(View.java:22429) 
         at android.os.Handler.handleCallback(Handler.java:751) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6119) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Method.invoke(Native Method) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:5637)  
         at android.view.View$PerformClick.run(View.java:22429)  
         at android.os.Handler.handleCallback(Handler.java:751)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:154)  
         at android.app.ActivityThread.main(ActivityThread.java:6119)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
        Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4 
         at app.com.example.android.oraclethedeciscionmaker.HomeScreen.onClick(HomeScreen.java:23) 
         at java.lang.reflect.Method.invoke(Native Method)  
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
         at android.view.View.performClick(View.java:5637)  
         at android.view.View$PerformClick.run(View.java:22429)  
         at android.os.Handler.handleCallback(Handler.java:751)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:154)  
         at android.app.ActivityThread.main(ActivityThread.java:6119)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
Application terminated. 

主屏幕上的活動:

package app.com.example.android.oraclethedeciscionmaker; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 

public class HomeScreen extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home_screen); 
    } 

    public void onClick(View view){ 

     // Setting up an array of 5 random number generators between 0 and 1 
     int[] guesser = new int[4]; 
     guesser[0] = (int) Math.random(); 
     guesser[1] = (int) Math.random(); 
     guesser[2] = (int) Math.random(); 
     guesser[3] = (int) Math.random(); 
     guesser[4] = (int) Math.random(); 

     // 0 out of 0 
     if(guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 0){ 
      Intent intent = new Intent(HomeScreen.this, ZeroOfFive.class); 
      startActivity(intent); 
      // If this statement is true go to this activity 
     } 
     // 1 out of 5 
     else if(guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 1 
      || guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 0 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 0){ 
      Intent intent = new Intent(HomeScreen.this, OneOfFive.class); 
      startActivity(intent); 
      // If this statement is true go to this activity 
     } 
     //2 out of 5 
     else if(guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 1 
      || guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 1 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 1 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 1 
      || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 0 && guesser[4] == 0){ 
      Intent intent = new Intent(HomeScreen.this, TwoOfFive.class); 
      startActivity(intent); 
      // If this statement is true go to this activity 
     } 
     //3 out of 5 
     else if(guesser[0] == 0 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 1 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 1 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 1 
      || guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 0 && guesser[3] == 1 && guesser[4] == 0 
      || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 0){ 
      Intent intent = new Intent(HomeScreen.this, ThreeOfFive.class); 
      startActivity(intent); 
      // If this statement is true go to this activity 
     } 
     //4 out of 5 
     else if( guesser[0] == 0 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 1 
       || guesser[0] == 1 && guesser[1] == 0 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 1 
       || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 1 && guesser[4] == 0 
       || guesser[0] == 1 && guesser[1] == 1 && guesser[2] == 1 && guesser[3] == 0 && guesser[4] == 1){ 
      Intent intent = new Intent(HomeScreen.this, FourOfFive.class); 
      startActivity(intent); 
      // If this statement is true go to this activity 

     } 
     //5 out of 5 
     else { 
      Intent intent = new Intent(HomeScreen.this, FiveOfFive.class); 
      startActivity(intent); 
     } 
    } 
} 

回答

1

你正在創建一個只有4個空格一個數組,但你嘗試分配5個值:

// Setting up an array of 5 random number generators between 0 and 1 
int[] guesser = new int[4]; // four spaces 
guesser[0] = (int) Math.random(); 
guesser[1] = (int) Math.random(); 
guesser[2] = (int) Math.random(); 
guesser[3] = (int) Math.random(); 
guesser[4] = (int) Math.random(); // 5th value 

更改它以這樣的:

int[] guesser = new int[5]; 
+0

謝謝,它工作正常。 – okunato

0

您應該掃描下stacktrace錯誤消息並查找一行,其中包含您編寫的類和方法的名稱。當你這樣做時,你會發現:

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4 
    at app.com.example.android.oraclethedeciscionmaker.HomeScreen.onClick(HomeScreen.java:23) 

這告訴你,錯誤發生在HomeScreen.java的第23行。基於錯誤,如果在聲明guesser仔細一看,這似乎是行

guesser[4] = (int) Math.random(); 

,您已經分配陣列的4個元素。 Java數組從索引0開始,因此您允許使用的最大索引爲3.您可以通過更改聲明以創建包含5個元素的數組來輕鬆修復此問題:

int[] guesser = new int[5]; 
+0

謝謝,我真的很感謝幫助,它的工作 – okunato

相關問題