Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 越界异常(字符串)_Java_String_Indexoutofboundsexception - Fatal编程技术网

Java 越界异常(字符串)

Java 越界异常(字符串),java,string,indexoutofboundsexception,Java,String,Indexoutofboundsexception,我正在为我的Java类做一个项目,似乎不知道如何解决这个问题。基于这个异常,我知道它位于字符串索引长度内,但是,我似乎无法纠正这个问题。这是我第一次尝试学习Java,所以请原谅我的新手问题 手头任务的一些背景:我正在尝试导入一个ascii艺术文件(.txt),将其转换为csv格式,然后输出到指定的文件。方法签名由讲师提供,无法操作。此代码可以编译,但在运行时,会引发一个越界异常,引用我对imageToNumRep的调用 以下是我在这一特定部分的代码: import java.io.*;

我正在为我的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();
        }
    }
} 
import java.io.*;
导入java.util.*;
公共类转换{
公共静态void main(字符串[]args)引发FileNotFoundException{
文件输入=新文件(“Flag.txt”);
文件输出=新文件(“result.txt”);
imageToNumRep(输入、输出);
}
公共静态void imageToNumRep(文件输入、文件输出)引发FileNotFoundException{
扫描仪输入=新扫描仪(输入);
PrintStream out=新的PrintStream(输出);
整数计数=0;
while(在.hasNextLine()中){
计数++;
字符串s=in.nextLine();
输出。打印(“”);
对于(int x=0;x
您正在从索引
0
循环到
s.length()-2
s.length()-1
将不包括在内,因为
您正在从索引
0
循环到
s.length()-2
s.length())-1
将不包括在内,因为
您正在从索引
0
循环到
s.length()-2
s.length()-1
将不包括在内,因为
您正在从索引
0
循环到
s.length()-2
s.length())-1
将不包括在内,因为除了前面的答案之外,还有一个
,乍一看

while(s.charAt(x)==s.charAt(x+1)) {
num++;
}

不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。

除了前面的答案,乍一看

while(s.charAt(x)==s.charAt(x+1)) {
num++;
}

不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。

除了前面的答案,乍一看

while(s.charAt(x)==s.charAt(x+1)) {
num++;
}

不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。

除了前面的答案,乍一看

while(s.charAt(x)==s.charAt(x+1)) {
num++;
}


不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。

我们需要查看堆栈跟踪以及引发异常的行。是的,在这里。线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)在哪里-2在?我没有看到那一行。条件是
x
,所以
s.length()-2
将是x的最后一个值。循环是
for(int x=0;x
,因此
x
将从
0
变为
s.length()-2
,因为
哦,好的。对不起,我是在寻找编码逻辑,而不是迭代。谢谢你指出这一点,非常感谢你,这很有意义。现在-2在哪里?我没有看到那一行。条件是
xs.length()-2
将是x的最后一个值。循环是
for(int x=0;x
,因此
x
将从
0
变为
s.length()-2
,因为
哦,好的。对不起,我是在寻找编码逻辑,而不是迭代。谢谢你指出这一点,非常感谢你,这很有意义。现在-2在哪里?我没有看到那一行。条件是
xs.length()-2
将是x的最后一个值。循环是
for(int x=0;x
,因此
x
将从
0
变为
s.length()-2
,因为
哦,好的。对不起,我正在查找