2017-10-11 11 views
-2

私はJavaを使い始めていて、DotComゲームを構築しようとしています。しかし、およそ1/5(推定)私はこのプログラムを実行する時の、このエラーが現れます:スレッド「メイン」java.lang.IndexOutOfBoundsExceptionでJava DotComのゲームで、約1/5のエラーメッセージが表示される

例外:インデックス 63範囲外の長さを49 のjavaで java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) で java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)で.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372)at java.base/java.util.ArrayList .get(ArrayList.java:439)at AdvDotComLauncher.main(AdvDotComLauncher.java:23)

でAdvancedDotCom.startGame(AdvancedDotCom.java:12)ここでコードは次のとおりです。 LAUNCHER

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; 
    } 
} 

Dその他のクラス

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とにかく、私がこのテーマに取り組むことができたら助けてください。

+0

デバッグしてください。例外は明らかです。私たちは無料のデバッグサービスではありません。 – John3136

+0

あなたが少なくともこの問題に直面しているコードの関連する行をハイライト表示するのに失敗した場合は、デバッグを試みてください。 – Nilabja

答えて

0

この単純なコードは、エラー

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

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

    System.out.println(chooseLetter); 

letters[0]は、Javadocには、0の値を返します。これは、あなたがnextIntを呼び出している、65のASCII値を持つchar値Aを返して表示され、テーブルを作成するために使用する奇妙なコードは、このタイプの長さのテーブルを作成しません。

+0

こんにちは、私はJavaを使い慣れていません。どのようにコードが変わっていますか、どのように改善することができますか?また、この問題の修正方法は? – Lyfe

関連する問題