【问题标题】:Java DotCom game having an error message about 1/5 of the timeJava DotCom 游戏大约有 1/5 的时间有错误消息
【发布时间】:2026-02-13 06:55:02
【问题描述】:

我是 Java 新手,正在尝试构建一个 DotCom 游戏。但是,在我运行这个程序的大约 1/5(估计)时间里,会出现这个错误:

线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引 长度为 49 的 63 次出界 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) 在 java.base/java.util.Objects.checkIndex(Objects.java:372) 在 java.base/java.util.ArrayList.get(ArrayList.java:439) 在 AdvancedDotCom.startGame(AdvancedDotCom.java:12) 在 AdvDotComLauncher.main(AdvDotComLauncher.java:23)

代码如下: 发射器

import java.util.ArrayList;
import java.util.Scanner;

public class AdvDotComLauncher {
    public static void main(String[] args) {
        int myInt = 0;
        boolean wrong = false;
        System.out.println("Welcome! Please enter a number between 7 and 25. That will be your arena size.");
        do {
            Scanner scanner = new Scanner(System.in);
            myInt = scanner.nextInt();
            if (myInt < 7 || myInt > 25) {
                wrong = true;
                System.out.println("Please enter a number between 7 and 25.");
            }
            else {
                wrong = false;
            }
        } while(wrong == true);
        AdvDotComTable dotComTable = new AdvDotComTable();
        AdvancedDotCom dotCom = new AdvancedDotCom();
        ArrayList<String> table = dotComTable.createTable(myInt);
        dotCom.startGame(table, myInt);
    }
}

表格类

    import java.util.ArrayList;

public class AdvDotComTable {
    public ArrayList<String> createTable(int size) {
        //Used to add the right amount elements to the Array
        int done = size * size;
        //Used for A0, A1, A2, B0, etc.
        int number = 0;
        //Used to tell when to increase the letter
        int size2 = size;
        //Used to tell which letter we're on by index
        int index = 0;
        ArrayList<String> table = new ArrayList<String>();
        char[] letters = "ABCDEFGHIJKLMNOPJRSTUVWXYZ".toCharArray();
        while (done > 0) {
            if (size2 == 0) {
                size2 = size;
                index++;
                number = 0;
            }
            table.add("" + letters[index] + number);
            number++;
            done--;
            size2--;
        }
        return table;
   }
}

DOTCOM 类

import java.util.ArrayList;
import java.util.Random;

public class AdvancedDotCom {
    public void startGame(ArrayList<String> table, int size) {
         Random random = new Random();
         char[] letters = "ABCDEFGHIJKLMNOPJRSTUVWXYZ".toCharArray();

         int chooseLetter = random.nextInt(letters[size]);
         int chooseNumber = random.nextInt(size - 3);

         char grabLetterFromTable = table.get(chooseLetter).charAt(0);
         int grabNumberFromTable = Character.getNumericValue((table.get(chooseLetter).charAt(1)));

         System.out.print("You have to guess " + grabLetterFromTable + grabNumberFromTable + ", ");
         System.out.print("" + grabLetterFromTable + (grabNumberFromTable + 1) + ", and ");
         System.out.print("" + grabLetterFromTable + (grabNumberFromTable + 2));
        }
    }

我不知道是什么导致了这个问题。我是 Java 新手,所以这可能是一个新错误 :P 无论如何,如果我能在这个主题上获得任何帮助,我们将不胜感激。

【问题讨论】:

  • 调试它。例外很明显。我们不是免费的调试服务。
  • 尝试调试它,如果失败,至少突出显示您面临此问题的相关代码行

标签: java object arraylist


【解决方案1】:

这个简单的代码会显示你的错误

    Random random = new Random();
    char[] letters = "ABCDEFGHIJKLMNOPJRSTUVWXYZ".toCharArray();

    int chooseLetter = random.nextInt(letters[0]);

    System.out.println(chooseLetter);

letters[0] 正在返回 char 值 A,其 ascii 值为 65,然后您正在调用 nextInt,根据 javadocs 将返回一个介于 0 和 65 之间的值。您使用的奇怪代码创建您的表格不会创建具有这种长度的表格

【讨论】:

  • 嗨,我是 Java 新手。代码有多奇怪,我该如何改进它?另外,这个问题的解决方法是什么?
最近更新 更多