Java 运行时出现奇怪错误,表示边界外异常

Java 运行时出现奇怪错误,表示边界外异常,java,Java,第一部分 import java.io.File; import java.io.IOException; import java.util.Scanner; import static java.lang.System.*; public class RelativesTester { public static void main( String args[] ) throws IOException { Scanner in = new Scanner

第一部分

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import static java.lang.System.*;

public class RelativesTester
{
    public static void main( String args[] ) throws IOException
    {


        Scanner in = new Scanner(new File("Relatives.dat"));

            int z = in.nextInt();

            for(int x = 0; x<z;x++)
            {
                String n = in.nextLine();
                Relatives a = new Relatives();
                a.setPersonRelative(n);
                System.out.println (a);
            }

    }
}
我在说OutofBounds异常时出错,但我不知道为什么或者这意味着什么?我还没做完,这是问题还是别的什么?如果是toString,我如何格式化它,使其看起来像这样

Bob is related to John Tom
Dot is related to Chuck Fred Jason Tom
Elton is related to Linh

我无法使其工作

如果文件没有两个用空格分隔的字符串,则以下代码将失败

String[] personRelative = line.split(" ");
String person = personRelative[0];
String relative = personRelative[1];

你试过调试这个吗?

从你发布的代码中,我只能看到一个地方会出现错误。(如果您也发布了确切的错误,这会很有帮助,因为它包含异常发生的位置、行号、堆栈跟踪等信息。)

如果
line.split()
返回长度为1的数组,尝试访问索引1将导致OOB异常

如果您知道
split()
应该返回长度为2的数组,请验证它。比如说,

String[] personRelative = line.split(" ");
if(personRelative.length != 2){ throw new RuntimeException("Split Error!"); }
String person = personRelative[0];
String relative = personRelative[1];

作为旁注,我真的建议您阅读一些基本的java教程,也许。

dat文件的最后一行不包含任何
。因此,split方法返回的数组大小仅为1。读取此行时,以下代码会导致OutOfBoundsException:

String[] personRelative = line.split(" ");
String person = personRelative[0];
String relative = personRelative[1];// This line causes ArrayIndexOutOfBoundsException

错误发生在哪一行?应该是,在错误消息的开头附近。我怀疑发生的情况是,在您读取了初始整数之后,您对
nextLine
的下一个调用正在检索第一行的其余部分-换句话说,是一个空字符串。当您尝试将空字符串拆分为一个人和一个亲戚时,它找不到任何姓名,因此您得到一个空数组。然后尝试在该数组中查找不存在的项0和1。a.setPersonRelative(n);&字符串relative=personRelative[1];对不起,我不理解您的评论。是的,我的回答表明我理解错误所在。你知道我的答案吗?
String[] personRelative = line.split(" ");
String person = personRelative[0];
String relative = personRelative[1];
String[] personRelative = line.split(" ");
if(personRelative.length != 2){ throw new RuntimeException("Split Error!"); }
String person = personRelative[0];
String relative = personRelative[1];
String[] personRelative = line.split(" ");
String person = personRelative[0];
String relative = personRelative[1];// This line causes ArrayIndexOutOfBoundsException