- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 新手。我在 Android Studio 中创建了一个简单的 Tic-Tac-Toe 游戏。它有一个网格和一个状态栏,可以告诉轮到谁以及谁赢了。我还添加了重置游戏的方法。游戏运行良好,但每当玩家获胜时,游戏就会崩溃(TicTacToeme 已停止)。
我也尝试过初始化一些变量,但这对我不起作用。
这是我的完整 MainActivity.java 代码:
package com.jashanubhi.tictactoeme;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int activePlayer = 0;
boolean gameActive = true;
int[] gameState = {2,2,2,2,2,2,2,2,2};
int[][] winningPositions = {{0,1,2}, {3,4,5}, {6,7,8},
{0,4,8}, {2,4,6},
{0,3,6}, {1,4,7}, {2,5,8}};
public void playerTap(View view) {
ImageView img;
img = (ImageView) view;
int tappedImage;
tappedImage = Integer.parseInt(img.getTag().toString());
TextView status;
status = findViewById(R.id.status);
if (gameState[tappedImage] == 2 && gameActive) {
gameState[tappedImage] = activePlayer;
img.setTranslationY(-1000f);
if (activePlayer == 0) {
img.setImageResource(R.drawable.x);
activePlayer = 1;
status.setText("O's Turn - Tap to Play");
} else {
img.setImageResource(R.drawable.o);
activePlayer = 0;
status.setText("X's Turn - Tap to Play");
}
img.animate().translationYBy(1000f).setDuration(300);
}
for (int[] winningPosition : winningPositions) {
if (gameState[winningPosition[0]] == gameState[winningPosition[1]] && gameState[winningPosition[1]] == gameState[winningPosition[2]]
&& gameState[winningPosition[0]] != 2) {
if (winningPosition[0] == 0) {
status.setText("X has won");
}
if (winningPosition[0] == 1) {
status.setText("O has won");
}
gameActive = false;
}
}
if(!gameActive){
gameReset(view);
}
}
public void gameReset(View view){
activePlayer = 0;
gameActive = true;
for(int i = 0; i <= gameState.length; i++){
gameState[i] = 2;
}
((ImageView)findViewById(R.id.imageView0)).setImageResource(0);
((ImageView)findViewById(R.id.imageView1)).setImageResource(0);
((ImageView)findViewById(R.id.imageView2)).setImageResource(0);
((ImageView)findViewById(R.id.imageView3)).setImageResource(0);
((ImageView)findViewById(R.id.imageView4)).setImageResource(0);
((ImageView)findViewById(R.id.imageView5)).setImageResource(0);
((ImageView)findViewById(R.id.imageView6)).setImageResource(0);
((ImageView)findViewById(R.id.imageView7)).setImageResource(0);
((ImageView)findViewById(R.id.imageView8)).setImageResource(0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这是我的 Logcat(仅错误):
2020-03-29 15:15:36.635 6517-6517/com.jashanubhi.tictactoeme E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jashanubhi.tictactoeme, PID: 6517
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
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:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
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:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=9; index=9
at com.jashanubhi.tictactoeme.MainActivity.gameReset(MainActivity.java:61)
at com.jashanubhi.tictactoeme.MainActivity.playerTap(MainActivity.java:53)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
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:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
这是我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/title"
android:textSize="38dp"
android:textStyle="bold"
app:fontFamily="sans-serif-light"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView"
android:layout_width="398dp"
android:layout_height="398dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:srcCompat="@drawable/grid" />
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X's Turn - Tap to Play"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<LinearLayout
android:layout_width="398dp"
android:layout_height="398dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@+id/textView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView0"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="0" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="1" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView3"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="3" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="4" />
<ImageView
android:id="@+id/imageView5"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="5" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView6"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="6" />
<ImageView
android:id="@+id/imageView7"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="7" />
<ImageView
android:id="@+id/imageView8"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="playerTap"
android:padding="23sp"
android:tag="8" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
最佳答案
您的问题在 gameReset
您获得的功能 java.lang.ArrayIndexOutOfBoundsException: length=9; index=9
因为里面有循环。
你正在做for(int i = 0; i <= gameState.length; i++)
但循环停止的术语是 i<=gameState.length
而不是i<gameState.length
这会导致您访问数组长度 pos 中的数组,例如,如果数组长度为 5 并且您想要获取第 5 个,这是您应该在数组中访问的最大位置 arr[4]
但您正在尝试访问arr[5]
它不在数组中,因此您得到 java.lang.ArrayIndexOutOfBoundsException
.
关于java - (Android Studio) 我的 Tic-Tac-Toe 游戏由于 (java.lang.IllegalStateException : Could not execute method for android:onClick) error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913110/
在 Tomcat 6/Ubuntu 12.04 上启动 Grails 2.1.0 应用程序时出现以下错误。 Error 500 - Internal Server Error. groovy.lang
在运行 Storm 拓扑时,我收到此错误。拓扑完美运行 5 分钟,没有任何错误,然后失败。我正在使用 Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS as 300 sec i
我有一个 jsp 代码在其中一台机器上运行良好。但是当我复制到另一台机器时,我得到了这个 no such method found 异常。我是 Spring 的新手。有人可以解释我错过了什么吗? 以下
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我的代码在下面给出了一个错误; Exception in thread "main" java.lang.NoSuchMethodError: com/myApp/Client.cypherCBC(L
我正在尝试一个 Restful web 服务示例,所以当我要访问 url 时,我遇到了异常 java.lang.NoSuchMethodError: jersey.repackaged.com.goo
我正在将一个 Spring web 项目转换为一个 Maven 项目,但我收到了这个错误: java.lang.NoSuchMethodError: org.jboss.logging.Logger.
在我的项目中,我有一个像这样的枚举: public enum MyEnum { FIRST(1), SECOND(2); private int value; private MyEnum(int v
我创建了这个简单的示例,用于读取 Linux 正常运行时间: public String getMachineUptime() throws IOException { String[] di
我正在使用 Eclipse,并且正在使用 Java。我的目标是使用 bogoSort 方法对 vector 进行排序在一个 vector (vectorExample)中适应我的 vector 类型,
我正在运行以下查询。它显示一条错误消息。如何解决这个错误? ListrouteList=null; List companyList = session.createS
我有以下模型类: @Entity @Table(name="user_content") @org.hibernate.annotations.NamedQueries({ @org.
我有那个错误。这是我的代码: GmailSettingsService service = new GmailSettingsService(APPLICATION_NAME, DOMAIN_NAME
实际上我在执行我的java程序时遇到了下面提到的错误 Exception in thread "pool-1-thread-1" java.lang.ClassCastException: jav
java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String 我在以下代码中遇到此异常: Strin
我正在尝试从 linkedhashset 中检索随机元素。下面是我的代码,但它每次都给我异常。 private static void generateRandomUserId(Set userIds
我已经完成了 Android 中的代码: List spinnerArray = new ArrayList(); for (int i = 0; i item = (LinkedTreeMap)
这个问题已经有答案了: Explanation of ClassCastException in Java (12 个回答) 已关闭 6 年前。 我已经编写了 java 到 Json 的代码,同时从页
这个问题在这里已经有了答案: ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn (4 个答案) 关闭 6 年前
我在运行时遇到问题来编译这段代码,这给我一个错误,java.lang.Integer 无法转换为 Java.lang.Double。如果有人帮助我更正此代码,我将非常高兴 double x; pu
我是一名优秀的程序员,十分优秀!