2014-01-16 45 views
0

你好我有我的android应用程序的问题,当我开始应用程序崩溃时,我尝试添加一个颜色到一个Paint阵列,我是新编程,提前对不起,如果这是愚蠢的东西,这里是崩溃的应用程序和日志之类的代码Android应用程序崩溃问题(初级程序员)

01-17 00:12:40.242: E/Trace(29767): error opening trace file: No such file or directory (2) 
01-17 00:12:40.302: D/AndroidRuntime(29767): Shutting down VM 
01-17 00:12:40.302: W/dalvikvm(29767): threadid=1: thread exiting with uncaught exception (group=0x40da2318) 
01-17 00:12:40.302: E/AndroidRuntime(29767): FATAL EXCEPTION: main 
01-17 00:12:40.302: E/AndroidRuntime(29767): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.asdfghjk/com.example.asdfghjk.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=55; index=55 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2063) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2088) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread.access$600(ActivityThread.java:134) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.os.Looper.loop(Looper.java:137) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread.main(ActivityThread.java:4744) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at java.lang.reflect.Method.invokeNative(Native Method) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at java.lang.reflect.Method.invoke(Method.java:511) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at dalvik.system.NativeStart.main(Native Method) 
01-17 00:12:40.302: E/AndroidRuntime(29767): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=55; index=55 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.example.asdfghjk.MyBall.inisializer(MyBall.java:57) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.example.asdfghjk.MyBall.<init>(MyBall.java:22) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.example.asdfghjk.GameView.<init>(GameView.java:25) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at com.example.asdfghjk.MainActivity.onCreate(MainActivity.java:17) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.Activity.performCreate(Activity.java:5008) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
01-17 00:12:40.302: E/AndroidRuntime(29767): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2027) 
01-17 00:12:40.302: E/AndroidRuntime(29767): ... 11 more 

代码:

public class MyBall { 
private GameView gameV; 
Random dice = new Random(); 
int x, y, xSpeed, ySpeed, rad; 
Paint paint = new Paint(); 
Paint pps[] = new Paint[55]; 
List<Paint> paints = new ArrayList<Paint>(); 

public MyBall(GameView gameV) { 
    this.gameV = gameV; 
    rad = 55; 
    inisializer(); 
    // set color of circles 

} 

public void onDraw(Canvas canvas) { 
    // draw circles with the color thats setted in initialiser 
    for (int s = rad; s >= 0; s--) { 

     canvas.drawCircle(x, y, s, pps[s]); 
    } 

    update(); 
} 

private void update() { 
    if (x > gameV.getWidth() - rad - xSpeed || x - rad < 0) { 
     xSpeed = -xSpeed; 
    } 
    if (y > gameV.getHeight() - rad || y - rad < 0) { 
     ySpeed = -ySpeed; 
    } 

    x += xSpeed; 
    y += ySpeed; 

} 

private void inisializer() { 

    for (int i = 0; i <= rad; i++) { 

     paint.setARGB(250, dice.nextInt(255), dice.nextInt(255), 
       dice.nextInt(255)); 

     pps[i] = paint; 

    } 

    x = 250; 
    y = 250; 
    xSpeed = dice.nextInt(3); 
    ySpeed = 1; 
} 

}

回答

0

pps数组的长度为55个元素(ID为0到54),但在您的inisializer()方法中,您正在遍历具有0到55的ID的元素。要解决此问题,您需要遍历ids 0到54,因此请更改。 ..

for (int i = 0; i <= rad; i++) {

​​

1

首先

for (int s = rad; s >= 0; s--) { 

应该是:

for (int s = rad-1; s >= 0; s--) { 

for (int i = 0; i <= rad; i++) { 

应该是:

for (int i = 0; i < rad; i++) { 

您正在尝试存取权限的项目NR 55.可惜的是有NR 55没有项目有55个项目从0开始。

+0

我可以同意答案的前半部分 - 没有什么可以阻止你在数组中从上到下导航。 –

+0

<=意味着55被允许。所以在你的初始化时你可以调用pps [i] = paint;这就是说pps [55] =绘画; –

+0

谢谢大家,对于发布这么愚蠢的问题感到抱歉:/,我是编程新手,我从互联网了解到的全部是 – user3115