Java 爪哇语;无此类要素例外情况”;

Java 爪哇语;无此类要素例外情况”;,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,我正在尝试做一个实验室,我应该从numbers.txt文件中找到模式。但我在数组中存储数字时遇到问题。我知道如何读取文件,但由于某种原因,当我试图存储数字时,我得到了一个java.util.NoSuchElementException。我想这意味着我正在使用的扫描仪没有任何其他东西可以读取,但我已经尝试了这种方法,所以我不明白发生了什么 以下是问题的主要部分: int [] modeArray = new int [total]; try { in = new Scanner(new F

我正在尝试做一个实验室,我应该从numbers.txt文件中找到模式。但我在数组中存储数字时遇到问题。我知道如何读取文件,但由于某种原因,当我试图存储数字时,我得到了一个
java.util.NoSuchElementException
。我想这意味着我正在使用的扫描仪没有任何其他东西可以读取,但我已经尝试了这种方法,所以我不明白发生了什么

以下是问题的主要部分:

int [] modeArray = new int [total];
try {
    in = new Scanner(new File("numbers.txt"));
    for (int x = 0; x <= total; x++) {
        modeArray[x] = in.nextInt();
    }
}
catch (IOException i) {
    System.out.println("Error: " + i.getMessage());
}
int[]modeArray=newint[total];
试一试{
in=新扫描仪(新文件(“numbers.txt”);

对于(int x=0;x您将获得异常,因为文件中没有包含足够的整数,正如您所怀疑的那样

另外,
NoSuchElementException
不是一个
IOException
,因此它不会被try-catch捕获。只需将它添加到catch语句中:

int[] modeArray = new int[total];
try (Scanner in = new Scanner(new File("numbers.txt"))) {
    for (int x = 0; x <= total; x++) {
        modeArray[x] = in.nextInt();
    }
} catch (IOException | NoSuchElementException i) {
    System.out.println("Error: " + i.getMessage());
}
int[]modeArray=newint[total];
try(Scanner in=new Scanner(新文件(“numbers.txt”)){

对于(int x=0;x您将获得异常,因为文件中没有包含足够的整数,正如您所怀疑的那样

另外,
NoSuchElementException
不是一个
IOException
,因此它不会被try-catch捕获。只需将它添加到catch语句中:

int[] modeArray = new int[total];
try (Scanner in = new Scanner(new File("numbers.txt"))) {
    for (int x = 0; x <= total; x++) {
        modeArray[x] = in.nextInt();
    }
} catch (IOException | NoSuchElementException i) {
    System.out.println("Error: " + i.getMessage());
}
int[]modeArray=newint[total];
try(Scanner in=new Scanner(新文件(“numbers.txt”)){

对于(int x=0;x
NoSuchElementException
不是
IOException
(请参见中的对象层次结构树)。您必须
捕获(NoSuchElementException i)

但这里有两个问题:

  • 在您的代码中,
    total
    是数字的总和,但您确实希望在创建数组时使用
    numbers
    。(例如,对于数字3、5、7,有3个数字——这是创建数组大小时所需的数字,但
    total
    将为15。)

  • for
    循环中,您需要
    i
    ,而不是
    i
    NoSuchElementException
    不是
    IOException
    (请参见中的对象层次结构树)。您必须
    捕获(NoSuchElementException i)

    但这里有两个问题:

  • 在您的代码中,
    total
    是数字的总和,但您确实希望在创建数组时使用
    numbers
    。(例如,对于数字3、5、7,有3个数字——这是创建数组大小时所需的数字,但
    total
    将为15。)

  • for
    循环中,您希望
    i
    ,而不是
    i
    NoTouchElementException
    运行时异常,而不是
    IOException
    。因此不会捕获它。下面是层次结构

         java.lang.Object
                java.lang.Throwable
                       java.lang.Exception
                               java.lang.RuntimeException
                                        java.util.NoSuchElementException
    
    VS

    您可以通过以下方式更正此问题:

  • 通过
    java.util.NoTouchElementException导入异常(现在您只导入了
    IOException

  • 捕获它(例如:
    catch(NoSuchElementException i)

  • 另外,在
    for
    循环中:

    for (int x = 0; x <= total; x++) {
                modeArray[x] = inThree.nextInt();
            }
    

    for(int x=0;x
    NoTouchElementException
    是一个
    RuntimeException
    ,而不是
    IOException
    。因此它不会被捕获。下面是层次结构

         java.lang.Object
                java.lang.Throwable
                       java.lang.Exception
                               java.lang.RuntimeException
                                        java.util.NoSuchElementException
    
    VS

    您可以通过以下方式更正此问题:

  • 通过
    java.util.NoTouchElementException导入异常(现在您只导入了
    IOException

  • 捕获它(例如:
    catch(NoSuchElementException i)

  • 另外,在
    for
    循环中:

    for (int x = 0; x <= total; x++) {
                modeArray[x] = inThree.nextInt();
            }
    


    for(int x=0;x IMHO阅读时最好使用
    while(in.hasNext()){…}
    即使您知道正在读取多少个数字,也不要使用for循环。问题出在哪一行?看起来他们并没有真正回答下面的问题。即使您捕捉到它,也可能因为错误而误报数据。它突出显示了“modeArray[x]=in.nextInt();”lineI可能已经找到了。modeArray[x]当x==total时可能超出范围。但这不会引发indexOutOfBoundsException吗?当错误触发时,x是什么?@BenKnoble问题与数组大小无关。他会出现该异常,因为他尝试读取比文件实际拥有的数据更多的数据。im在读取时使用
    while(in.hasNext())更好吗{…}
    而不是for循环,即使你知道你在读多少个数字。问题出在哪一行?看起来他们并没有真正回答下面的问题。即使你抓住了它,也可能因为错误而误报数据。它突出显示了“modeArray[x]=in.nextInt();”lineI可能已经找到了。modeArray[x]当x==total可能超出范围。但这不会引发indexOutOfBoundsException吗?当错误触发时,x是什么?@BenKnoble该问题与数组大小无关。他得到该异常,因为他试图读取比文件实际拥有的更多数据。当我将NoSuchElementException添加到捕获中时,它表示该类会这样做不exist@Zak这是因为您只导入了java.io.IOException。请参阅我的答案。您需要将其添加到导入中,就像导入
    IOException
    一样。我也尝试导入它,但它仍然表示该类不存在。当我添加NoSuchElementExce时,该行应该是
    import java.util.NoSuchElementException;
    这句话的意思是说全班没有exist@Zak这是因为您只导入了java.io.IOException。请参阅我的答案。您需要将其添加到导入中,就像导入
    IOException
    一样。我也尝试导入它,但它仍然表示该类不存在。该行应为
    import java.util.NoSuchElementException;