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)