2017-10-11 36 views
-2

我是Java新手,正在嘗試構建一個DotCom遊戲。然而,約1/5的我運行這個程序的時間(估計值),這個錯誤顯示出來:Java DotCom遊戲有大約1/5的錯誤信息

異常線程「main」 java.lang.IndexOutOfBoundsException:指數 63出界外的長度49在 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) at java.base/java.util.Objects.checkIndex(Objects.java:372)at java.base/java.util.ArrayList .get(ArrayList.java:439)at AdvancedDotCom.startGame(AdvancedDotCom.java:12)在 AdvDotComLauncher.main(AdvDotComLauncher.java:23)

下面的代碼: 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 OTCOM CLASS

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新手,所以這可能是一個新的錯誤:無論如何,任何幫助,我可以得到這個問題將不勝感激。

+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]正在恢復其具有的65 ASCII碼值的字符值A,那麼你在呼喚nextInt有根據的javadoc將返回0之間的值65.用於創建表格的奇怪代碼不會創建具有此類長度的表格

+0

嗨,我是新來的Java。代碼如何奇怪,我該如何改進它?另外,這個問題的解決方法是什麼? – Lyfe