[英]Out of bounds exception (string)
我正在为我的Java类开发一个项目,似乎无法弄清楚如何解决此问题。 基于例外,我知道它位于字符串索引长度之内,但是,我似乎无法纠正该问题。 这是我第一次学习Java,因此请原谅我的新问题。
手头任务的一些背景:我正在尝试导入ascii艺术文件(.txt),将其转换为csv格式,然后输出到指定的文件。 方法签名是由讲师提供的,无法操作。 这段代码可以编译,但是在运行时会引发超出范围的异常,原因是我对imageToNumRep
调用。
这是本节的代码:
import java.io.*;
import java.util.*;
public class Convert{
public static void main(String[] args) throws FileNotFoundException {
File input=new File("Flag.txt");
File output=new File("result.txt");
imageToNumRep(input, output);
}
public static void imageToNumRep(File input, File output) throws FileNotFoundException {
Scanner in=new Scanner(input);
PrintStream out= new PrintStream(output);
int count=0;
while(in.hasNextLine()) {
count++;
String s=in.nextLine();
out.print("(");
for(int x=0; x < s.length()-1; x++) {
int num=1;
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
out.print(num+s.charAt(x-1));
num=1;
if(s.charAt(x) != s.charAt(x-1) && s.charAt(x) != s.charAt(x+1)) {
out.print("1,"+s.charAt(x));
} else {
num=1;
}
}
out.print(")");
out.println();
}
}
}
您正在从索引0
到s.length()-2
循环s.length()-2
由于<
运算符,将不包括s.length()-1
),这将避免在调用s.charAt(x+1)
出现异常s.charAt(x+1)
,但当您这样做时
s.charAt(x-1)
并且x = 0
,那么您将得到一个异常,因为它将类似于s.charAt(-1)
,这是无效的。
你能做什么? 您可以从1
开始迭代:
for(int x = 1; x < s.length() - 1; x++)
乍看之下,除了先前的答案外,
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
永远不要终止,因为您没有更改x的值。 但是,如果前两个连续的字符不相等,您可能会很幸运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.