Java 爪哇语;无此类要素例外情况”;
我正在尝试做一个实验室,我应该从numbers.txt文件中找到模式。但我在数组中存储数字时遇到问题。我知道如何读取文件,但由于某种原因,当我试图存储数字时,我得到了一个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
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;xNoSuchElementException
不是IOException
(请参见中的对象层次结构树)。您必须捕获(NoSuchElementException i)
但这里有两个问题:
在您的代码中,total
是数字的总和,但您确实希望在创建数组时使用numbers
。(例如,对于数字3、5、7,有3个数字——这是创建数组大小时所需的数字,但total
将为15。)
在for
循环中,您需要i
,而不是iNoSuchElementException
不是IOException
(请参见中的对象层次结构树)。您必须捕获(NoSuchElementException i)
但这里有两个问题:
在您的代码中,total
是数字的总和,但您确实希望在创建数组时使用numbers
。(例如,对于数字3、5、7,有3个数字——这是创建数组大小时所需的数字,但total
将为15。)
在for
循环中,您希望i
,而不是iNoTouchElementException
是运行时异常,而不是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;xNoTouchElementException
是一个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;
。