Java 我不明白为什么这个应用程序坏了
我是android开发的新手,我正在尝试编写一个简单的Simon式游戏来进行一些练习,但是我已经陷入了困境,我希望得到任何关于为什么它不能运行以及我能做些什么来修复它的帮助:Java 我不明白为什么这个应用程序坏了,java,android,Java,Android,我是android开发的新手,我正在尝试编写一个简单的Simon式游戏来进行一些练习,但是我已经陷入了困境,我希望得到任何关于为什么它不能运行以及我能做些什么来修复它的帮助: public class SimonActivity extends Activity { ArrayList<Integer> table1 = randomArrayList(3,4); ArrayList<Integer> table2 = new ArrayList<
public class SimonActivity extends Activity {
ArrayList<Integer> table1 = randomArrayList(3,4);
ArrayList<Integer> table2 = new ArrayList<Integer>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simon);
final Button blue = (Button)findViewById(R.id.blueButton);
final Button green = (Button)findViewById(R.id.greenButton);
final Button gold = (Button)findViewById(R.id.goldButton);
final Button red = (Button)findViewById(R.id.redButton);
//turn off the buttons
activate(blue, green, gold, red, false);
final Handler handler = new Handler();
final Runnable blueLight = new Runnable() {
public void run() {
blue.setBackgroundResource(R.drawable.lblue);
}
};
final Runnable goldLight = new Runnable() {
public void run() {
gold.setBackgroundResource(R.drawable.lgold);
}
};
final Runnable redLight = new Runnable() {
public void run() {
red.setBackgroundResource(R.drawable.lred);
}
};
final Runnable greenLight = new Runnable() {
public void run() {
green.setBackgroundResource(R.drawable.lgreen);
}
};
final Runnable switchOff = new Runnable() {
public void run() {
activate(blue, green, gold, red, false);
}
};
final Runnable switchOn = new Runnable() {
public void run() {
activate(blue, green, gold, red, true);
}
};
final Runnable playSequence = new Runnable() {
public void run() {
SystemClock.sleep(1000);
for (int i = 0; i < table1.size(); i++ ) {
switch(table1.get(i)) {
case 0 : handler.post(blueLight);
break;
case 1 : handler.post(goldLight);
break;
case 2 : handler.post(redLight);
break;
case 3 : handler.post(greenLight);
break;
}
SystemClock.sleep(700);
handler.post(switchOff);
SystemClock.sleep(300);
}
table2.clear();
handler.post(switchOn);
}
};
new Thread(playSequence).start();
while (true) {
if (table2.get(0) == 5){
table2.clear();
new Thread(playSequence).start();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_simon, menu);
return true;
}
public void activate(Button bt1, Button bt2, Button bt3, Button bt4, boolean valor) {
bt1.setClickable(valor);
bt2.setClickable(valor);
bt3.setClickable(valor);
bt4.setClickable(valor);
bt1.setBackgroundResource(R.drawable.bblue);
bt2.setBackgroundResource(R.drawable.bgreen);
bt3.setBackgroundResource(R.drawable.bgold);
bt4.setBackgroundResource(R.drawable.bred);
}
public static int random(int n) { //la de tota la vida
Random r = new Random();
int x = r.nextInt(n);
return x;
}
public static int[] randomarray(int tamany, int range) {
Random r = new Random();
int[] a = new int[tamany];
for (int i = 0; i < a.length; i++) {
a[i] = r.nextInt(range);
}
return a;
}
public static ArrayList<Integer> randomArrayList(int tamany, int range) {
Random r = new Random();
ArrayList<Integer> a = new ArrayList<Integer>();
for (int i = 0; i < tamany; i++) {
a.add(r.nextInt(range));
}
return a;
}
public void clic(View target) {
switch (target.getId()) {
case R.id.blueButton: table2.add(0);
break;
case R.id.goldButton: table2.add(1);
break;
case R.id.redButton: table2.add(2);
break;
case R.id.greenButton: table2.add(3);
break;
}
for (int i = 0; i < table2.size(); i++ ) {
if (table1.get(i) != table2.get(i)) {
table2.clear();
table1.clear();
table1 = randomArrayList(3, 4);
table2.add(5);
break;
}
}
if (table1.equals(table2)) {
table2.clear();
table1.add(random(4));
table2.add(5);
}
}
}
一般的想法是,它用随机数填充ArrayList,然后通过将按钮的颜色从较暗的更改为较亮的来播放此序列。然后激活按钮并将点击记录到第二个ArrayList中,并将其与原始ArrayList进行比较,以检查播放机是否输入了正确的组合
但是,它在加载时崩溃,留下以下调试信息。然而,由于我的理解有限,它被证明过于神秘,无法定位问题:
10-17 17:12:10.758:D/AndroidRuntime10439:关闭VM 10-17
17:12:10.758:W/dalvikvm10439:threadid=1:线程退出
未捕获异常组=0x40c47300 10-17 17:12:10.768:
E/AndroidRuntime10439:致命异常:main 10-17 17:12:10.768:
E/AndroidRuntime10439:java.lang.RuntimeException:无法启动
活动组件信息{joc.simondroid/joc.simondroid.SimonActivity}:
java.lang.IndexOutOfBoundsException:索引0无效,大小为0 10-17
17:12:10.768:E/AndroidRuntime10439:at
android.app.ActivityThread.performLaunchActivityActivityThread.java:2059
10-17 17:12:10.768:E/AndroidRuntime10439:at
android.app.ActivityThread.handleLaunchActivityActivityThread.java:2084
10-17 17:12:10.768:E/AndroidRuntime10439:at
android.app.ActivityThread.access$600ActivityThread.java:130 10-17
17:12:10.768:E/AndroidRuntime10439:at
android.app.ActivityThread$H.handleMessageActivityThread.java:1195
10-17 17:12:10.768:E/AndroidRuntime10439:at
android.os.Handler.dispatchMessageHandler.java:99 10-17
17:12:10.768:E/AndroidRuntime10439:at
android.os.Looper.loopLooper.java:137 10-17 17:12:10.768:
E/AndroidRuntime10439:at
android.app.ActivityThread.mainActivityThread.java:4745 10-17
17:12:10.768:E/AndroidRuntime10439:at
java.lang.reflect.Method.Invokenative方法10-17
17:12:10.768:E/AndroidRuntime10439:at
java.lang.reflect.Method.invokeMethod.java:511 10-17 17:12:10.768:
E/AndroidRuntime10439:at
java:786
10-17 17:12:10.768:E/AndroidRuntime10439:at
java:553 10-17
17:12:10.768:E/AndroidRuntime10439:at
dalvik.system.NativeStart.Main本地方法10-17 17:12:10.768:
E/AndroidRuntime10439:原因:
java.lang.IndexOutOfBoundsException:索引0无效,大小为0 10-17
17:12:10.768:E/AndroidRuntime10439:at
throwIndexOutOfBoundsExceptionArrayList.java:251
10-17 17:12:10.768:E/AndroidRuntime10439:at
java.util.ArrayList.getArrayList.java:304 10-17 17:12:10.768:
E/AndroidRuntime10439:at
joc.simondroid.SimonActivity.onCreateSimonActivity.java:99 10-17
17:12:10.768:E/AndroidRuntime10439:at
android.app.Activity.performCreateActivity.java:5008 10-17
17:12:10.768:E/AndroidRuntime10439:at
android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1079
10-17 17:12:10.768:E/AndroidRuntime10439:at
java:2023
10-17 17:12:10.768:E/AndroidRuntime10439:。。。还有11个
是吗
if (table2.get(0)
但在前面,您将其初始化为
ArrayList<Integer> table2 = new ArrayList<Integer>();
并且不要在其中放入任何项目,这样即使索引0也没有什么可交付的。
所以你得到了IndexOutOfBoundsException。你得到了
if (table2.get(0)
但在前面,您将其初始化为
ArrayList<Integer> table2 = new ArrayList<Integer>();
并且不要在其中放入任何项目,这样即使索引0也没有什么可交付的。
所以你得到了IndexOutOfBoundsException
原因:java.lang.IndexOutOfBoundsException:索引0无效,大小为0 10-17 17:12:10.768:E/AndroidRuntime10439:at
java:251 10-17 17:12:10.768:E/AndroidRuntime10439:at java.util.ArrayList.getArrayList.java:304 10-17 17:12:10.768:E/AndroidRuntime10439:at joc.simondroid.SimonActivity.onCreateSimonActivity.java:99
您正在尝试访问ArrayList的第一个条目索引0。由于我不知道onCreate方法中的代码行,我只能猜测它是这一行:
if (table2.get(0) == 5)
表2似乎是空的
原因:java.lang.IndexOutOfBoundsException:索引0无效,大小为0 10-17 17:12:10.768:E/AndroidRuntime10439:at
java:251 10-17 17:12:10.768:E/AndroidRuntime10439:at java.util.ArrayList.getArrayList.java:304 10-17 17:12:10.768:E/AndroidRuntime10439:at joc.simondroid.SimonActivity.onCreateSimonActivity.java:99
您正在尝试访问ArrayList的第一个条目索引0。由于我不知道onCreate方法中的代码行,我只能猜测它是这一行:
if (table2.get(0) == 5)
>表2似乎是空的。非常感谢,我对此感到很疯狂。@user1090729不客气。试着自己去调查这件事。也许你下次可以发现错误;非常感谢,我对这件事感到非常激动。@user1090729不客气。试着自己去调查这件事。也许你下次可以发现错误;