2011-02-13 57 views
0

我已经开始学习Java和Android应用程序开发并行。目前,我一个String数组colorsArray而我试图用Log.v为什么这段代码强制退出?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="hello">Hello World, defaultActivity!</string> 
    <string name="app_name">Challenge</string> 
    <string name="red">Red</string> 
    <string name="orange">Orange</string> 
    <string name="yellow">Yellow</string> 
    <string name="green">Green</string> 
    <string name="blue">Blue</string> 
    <string name="indigo">Indigo</string> 
    <string name="violet">Violet</string> 
    <string-array name="colorsArray"> 
     <item>@string/red</item> 
     <item>@string/orange</item> 
     <item>@string/yellow</item> 
     <item>@string/green</item> 
     <item>@string/blue</item> 
     <item>@string/indigo</item> 
     <item>@string/violet</item> 
    </string-array> 
</resources> 

现在我想打印在不同的方式,阵列打印,只是做法。

package com.gaurish.challenge; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class defaultActivity extends Activity { 
    /** Called when the activity is first created. */ 
    public static final String DEBUG_TAG = "PracticeApp"; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String aColors[] = getResources().getStringArray(R.array.colorsArray); 
    printUsingForEach(aColors); 
    printUsingWhile(aColors); 
    printReverse(aColors); 
} 

private void printUsingForEach(String[] aColors) { 
    for(String i : aColors) { 
     Log.v(DEBUG_TAG, "String array printed using for each loop: " + i); 
    } 
} 

private void printUsingWhile(String[] aColors) { 
    byte i=0; 
    while(i<=aColors.length) { 
     Log.v(DEBUG_TAG, "String array printed using While loop: " + aColors[i++]); 
    } 
} 

private void printReverse(String[] aColors) { 
    int i=aColors.length -1; 
    while(i> (-1)) { 
     Log.v(DEBUG_TAG, "String array printed in reverse order -> " + aColors[i--]); 
    } 
} 
} 

printUsingForEach()& printUsingWhile()运行得很好,但printReverse方法只是不能运行,应用力达之前退出。 here is the log我建立针对Android 1.6的

请指导本的n00b,为什么发生这种情况

+0

java.lang.ArrayIndexOutOfBoundsException阅读日志正确,这是一个简单的错误看到一个检查哪一行的错误是特别。 defaultActivity.java Line:31 – Blundell 2011-02-13 15:54:53

+0

对不起,我保证会在下次仔细阅读日志。谢谢! – CuriousMind 2011-02-13 16:09:56

回答

4

你在你的代码中的错误:

while(i<=aColors.length) { ... } 

这将导致一个循环迭代与i = aColors.length,这是越界。

您可以在日志中看到这一点:

02-13 15:24:24.226: ERROR/AndroidRuntime(396): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gaurish.challenge/com.gaurish.challenge.defaultActivity}: java.lang.ArrayIndexOutOfBoundsException 
02-13 15:24:24.226: ERROR/AndroidRuntime(396): Caused by: java.lang.ArrayIndexOutOfBoundsException 
02-13 15:24:24.226: ERROR/AndroidRuntime(396):  at com.gaurish.challenge.defaultActivity.printUsingWhile(defaultActivity.java:31)