- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须创建一个数字内存游戏,但如果用户输入错误的数字,我会收到 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();
}
}
}
最佳答案
在调用 answer.substring(counterOne, counterTwo)
之前,您必须确保0 <= counterOne < answer.length()
和counterTwo <= answer.length()
.
substring
会抛出IndexOutOfBoundsException
如果the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex
.
编辑:
让我们尝试解决您的问题。以下循环的逻辑有缺陷:
answer = input.getText();
for(int i = 0; i < arrayCounter;i++){
newNumber = answer.substring(counterOne, counterTwo);
stringArray[i] = newNumber;
counterOne += 3;
counterTwo += 3;
}
如果我理解你想要做什么,你期望输入字符串(存储为 answer
)包含数字,你创建这些数字的数组,并将其与正确数字的数组进行比较。
但是,只有当用户的答案以“11x22x33...”之类的内容开头时,上述循环才有效,因为您希望提取 arrayCounter
(=3) 个来自该输入字符串的每个 2 个字符的子字符串,并且您将从字符串的位置 (0,1) (3,4) (6,7) 中提取它们。这意味着如果字符串少于 8 个字符,您将得到 StringIndexOutOfBoundsException
.
您不应假设输入字符串中数字的长度或数字的数量。更好、更简单的解决方案是:
stringArray = answer.split(" ");
这会在空格处分割输入数组。请注意,您将获得的数组的长度不一定与正确答案的长度匹配,因此您必须比较长度。
关于java - StringIndexOutOfBoundsException 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547308/
我正在编写一个程序,该程序从文件“items.txt”获取输入,并根据“changes.txt”添加或删除行,然后输出到另一个文件。 这是“items.txt”文件: 101,Nail #1 102,
我创建了一个应该清理String的方法。它必须删除 [a,z] 范围内的每个字符。 但我收到此异常:StringIndexOutOfBoundsException。当我插入超出条件的数字时,就会弹出此
我正在制作的这个程序编译不正确,我不断收到错误:线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-9 在 java.l
在输入整数后输入字符串“s”时出现此错误。 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String i
当我按下 Android 应用程序的“提交”按钮时,我遇到了应用程序崩溃的情况。该应用程序负责发送输入的数据,将其作为事件添加到用户的日历中。仅当日期字段留空时应用程序才会崩溃。我注意到存储日期分割部
我正在解决一个问题,如果相邻字符具有相同的值,我必须从字符串中删除字符。这是我的代码: import java.util.Scanner; public class SuperReducedStrin
我必须创建一个数字内存游戏,但如果用户输入错误的数字,我会收到 StringIndexOutOfBoundsException。我看了很多例子,但仍然不知道如何解决它。这发生在 actionPerfo
我编写了一个静态方法,旨在获取字符串并将其打乱。 当您输入给定的字符串,例如“四分七”时,您应该得到输出 “f rneosedvuc eroasn”,因为字符串被打乱到下面的网格中。 row 1:
我有以下代码 public class test{ public static void main(String[] args){ String one = "x";
当我尝试放置一个带有十六进制颜色的字符串变量来设置我的适配器类上的 edittext 的 setbackgroundcolor(Color.parseColor(String s)) 时,它说 Str
import java.io.* ; class Specimen { public static void main(String[] args) throws IOException
我在 Java 中收到以下错误消息 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String i
我有这个代码: String input = JOptionPane.showInputDialog("Enter text"); StringBuilder forward = new String
我有以下代码 while (input.hasNextLine()) { String line = input.nextLine(); System.out.println(line
在 stackoverflow 和其他论坛上寻找解决方案一个小时后,我放弃了。 您知道我为什么会遇到异常吗? public Stack einlesen(){ Scanner sc =
为什么下面的 Java 代码片段在第三行代码中抛出 StringIndexOutOfBoundsException? String str = "1234567890"; String sub1 =
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
这应该隔离姓名和分数,然后计算分数的平均值。输出应如下所示: Student Name Test 1 Test 2 Test 3 Final Avera
这个错误是在子字符串方法上抛出的,我发现很多线程都在处理这个问题,但我遇到的问题似乎有所不同。我知道如果您的字符串短于子字符串(开始,结束)大小,它会抛出此错误,但在任何内容传递到方法调用之前都会抛出
我正在使用 java 编写一个密码学/密码分析程序作为我主人的家庭作业。无论如何,我使用一种方法来删除无用的空格并使我显示的字符串正确地显示在 JTextArea 中。此方法非常适合小文本,但当我使用
我是一名优秀的程序员,十分优秀!