我正在为我的Java类开发一个项目,似乎无法弄清楚如何解决这个问题。基于异常,我理解它位于字符串索引长度内,但是,我似乎无法纠正这个问题。这是我第一次尝试学习Java,所以请原谅我的新手问题。
手头任务的一些背景:我正在尝试导入ascii art文件(.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 :(得分:2)
您正在从索引0
循环到s.length()-2
(由于s.length()-1
运算符而不会包含<
),这样可以避免出现异常你打电话给s.charAt(x+1)
,但是当你做
s.charAt(x-1)
和x = 0
,然后您会收到异常,因为它会像s.charAt(-1)
一样无效。
你能做什么?
您可以从1
开始迭代:
for(int x = 1; x < s.length() - 1; x++)
答案 1 :(得分:1)
除了上一个答案,乍一看,
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
永远不应该终止,因为你没有改变x的值。如果前两个连续的字符不相等,你可能会很幸运。