Java StringIndexOutOfBoundsException的问题

Java StringIndexOutOfBoundsException的问题,java,Java,我必须创建一个数字记忆游戏,但是如果用户输入了错误的数字,我会得到一个StringIndexOutOfBoundsException。我看了很多例子,仍然不知道如何修复它。这发生在actionPerformed方法中,这行代码newNumber=answer.substring(counterOne,counterTwo)任何帮助都将不胜感激 import java.applet.Applet; import java.awt.Button; import java.awt.Color; imp

我必须创建一个数字记忆游戏,但是如果用户输入了错误的数字,我会得到一个
StringIndexOutOfBoundsException
。我看了很多例子,仍然不知道如何修复它。这发生在
actionPerformed
方法中,这行代码
newNumber=answer.substring(counterOne,counterTwo)任何帮助都将不胜感激

import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;



public class MemoryGame extends Applet implements ActionListener, Runnable {

    private Label prompt;
    private Button button;
    private TextField input, numDisplay;
    private int arrayCounter = 3, backgroundColor =0; 
    private int[] myArray = new int[arrayCounter];
    private int[] compare = new int[arrayCounter];
    private Thread delayThread;
    private boolean running = true, isCompare; 


    public void init(){
        prompt = new Label("Enter the numbers!");
        input = new TextField(20);
        numDisplay = new TextField(20);
        numDisplay.setEditable(false);
        button = new Button("Enter");

        add(prompt);
        add(input);
        add(numDisplay);
        add(button);
        button.addActionListener(this);

        populateArray();
        delayThread = new Thread(this); 
        delayThread.start();


    }
    public void paint(Graphics g){

        if(backgroundColor == 1){
            setBackground (Color.green);
        }
        else if(backgroundColor == 2){
            setBackground (Color.red);
        }
    }


    public void populateArray() {
        GenerateNumbers a = new GenerateNumbers();
        myArray = a.returnArray(); 


        int count = 1;
        for(int i = 0; i < myArray.length;i++){
            System.out.println("index: " + count + " : " + myArray[i]);
            count++;
            numDisplay.setText(" ");
        } //for testing purpose
    }

    @Override
    public void actionPerformed(ActionEvent e)throws StringIndexOutOfBoundsException {
        String answer ="", newNumber="";
        String[] stringArray = new String[arrayCounter];
        int counterOne = 0, counterTwo = 2;
        try{
            answer = input.getText();
            for(int i = 0; i < arrayCounter;i++){
                newNumber = answer.substring(counterOne, counterTwo);
                stringArray[i] = newNumber;
                counterOne += 3;
                counterTwo += 3;
            }
        }catch(NumberFormatException ex){
            ex.printStackTrace();
        }

        for(int i = 0; i < arrayCounter;i++){
            compare[i] = Integer.parseInt(stringArray[i]);
        }

        for(int i = 0; i < arrayCounter;i++){
            if(myArray[i] != compare[i]){
                backgroundColor = 2;
                input.setText("Wrong");
                repaint();
            }
            else{
                backgroundColor =1;
                input.setText("RIGHT!");//testing
                repaint();
            }

        }

    }

    public void destroy(){
        running = false; 
    }

    @Override
    public void run() {
        while(running){
            String numberString = "" ,stringTwo = "  ";
            for(int i = 0; i < arrayCounter;i++){
                numberString += myArray[i] + stringTwo;
                numDisplay.setText(numberString);
            }
            try{
                delayThread.sleep(3500);
            }catch(InterruptedException e){
                e.printStackTrace();
                Thread.currentThread().interrupt();
            }
            numDisplay.setText(" ");
            destroy();
        }
    }

}
import java.applet.applet;
导入java.awt.Button;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Label;
导入java.awt.TextField;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
公共类MemoryGame扩展小程序实现ActionListener,Runnable{
私有标签提示;
私人按钮;
私有文本字段输入,numDisplay;
私有int arrayCounter=3,backgroundColor=0;
私有int[]myArray=新int[arrayCounter];
私有整数[]比较=新整数[arrayCounter];
私有线程延迟线程;
private boolean running=true,isCompare;
公共void init(){
提示符=新标签(“输入数字!”);
输入=新文本字段(20);
numDisplay=新文本字段(20);
numDisplay.setEditable(false);
按钮=新按钮(“输入”);
添加(提示);
添加(输入);
添加(numDisplay);
添加(按钮);
addActionListener(这个);
populateArray();
delayThread=新线程(此线程);
delayThread.start();
}
公共空间涂料(图g){
如果(背景色==1){
挫折背景(颜色:绿色);
}
else if(backgroundColor==2){
挫折地面(颜色:红色);
}
}
公共无效公共阵列(){
GenerateNumbers a=新的GenerateNumbers();
myArray=a.returnArray();
整数计数=1;
for(int i=0;i
在调用
应答子串(counterOne,counterTwo)
之前,必须确保
0
索引自动边界异常将发生-如果满足以下任何条件

`counterOne` is negative, or 
`counterTwo` is larger than the length of `answer`, or 
`counterOne` is larger than `counterTwo`.
在您执行
回答之前。子字符串(计数器一、计数器二)
您可以执行以下操作

if (counterOne >= 0 && counterTwo < answer.length && counterOne <= counterTwo)

if(counterOne>=0&&counterTwo`counterOne` is negative, or 
`counterTwo` is larger than the length of `answer`, or 
`counterOne` is larger than `counterTwo`.
if (counterOne >= 0 && counterTwo < answer.length && counterOne <= counterTwo)