Java "no such element exception"
Java "no such element exception"
我正在尝试做一个实验,我应该从 numbers.txt 文件中找到模式。但是我在将数字存储在数组中时遇到了问题。我了解如何读取文件,但出于某种原因,当我尝试存储数字时,我得到了 java.util.NoSuchElementException
。我认为这意味着我正在使用的扫描仪没有其他任何东西可以读取,但我已经将该方法放入 try-catch 中,所以我不明白发生了什么。
这是问题的主要部分:
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());
}
如果您想查看本实验的其余部分,请查看其余代码:
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
/**
* lab 16.1
*
* @author (Raymond Ma)
* @version (1/3/15)
*/
public class firstLab {
public static void statistics() {
Scanner in;
Scanner inTwo;
Scanner inThree;
int total = 0;
double numbers = 0;
double num = 0;
double standardDeviation;
//Average part
try {
in = new Scanner(new File("numbers.txt"));
while (in.hasNextInt()) {
total += in.nextDouble();
numbers++;
}
}
catch (IOException i) {
System.out.println("Error: " + i.getMessage());
}
System.out.println("The Average of this huge list of integers is " + total/numbers);
//Standard deviation part
try {
inTwo = new Scanner(new File("numbers.txt"));
while (inTwo.hasNextInt()) {
num = Math.pow((inTwo.nextDouble() - (total/numbers)),2);
}
}
catch (IOException i) {
System.out.println("Error: " + i.getMessage());
}
standardDeviation = Math.sqrt(num/(numbers-1));
System.out.println("The Standard Deviation of this huge list of integers is " + standardDeviation);
//This is the most annoying part (the mode)
int [] modeArray = new int [total];
try {
inThree = new Scanner(new File("numbers.txt"));
for (int x = 0; x <= total; x++) {
modeArray[x] = inThree.nextInt();
}
}
catch(IOException i) {
System.out.println("Error: " + i.getMessage());
}
System.out.println("The Mode of this huge list of integers is ");// + )
}
}
正如您所怀疑的那样,您遇到了异常,因为文件中没有包含足够的整数。
此外,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());
}
NoSuchElementException
不是 IOException
。 (请参阅 Javadocs 中的对象层次结构树。)您必须 catch(NoSuchElementException i)
.
但是这里有两个问题:
- 在您的代码中,
total
是数字的总和,但您确实想在创建数组时使用 numbers
。 (例如,对于数字 3、5、7,有 3 个数字——这就是您在创建数组大小时想要的数字——但 total
将是 15。)
- 在您的
for
循环中,您需要 i < total
,而不是 i <= total
。同样,如果你有三个数字,由于索引计数从 0 开始,数组中的最大索引不是大小 (3),而是大小 - 1 (2)。
NoSuchElementException
是 RuntimeException
,而不是 IOException
。所以不会被抓到。这是层次结构。
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.util.NoSuchElementException
VS.
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.io.IOException
您可以通过
更正此问题
正在导入 java.util.NoSuchElementException
的异常(现在你只导入了 IOException
)
抓住它。 (例如:catch(NoSuchElementException i)
)
此外,在您的 for
循环中:
for (int x = 0; x <= total; x++) {
modeArray[x] = inThree.nextInt();
}
将x<= total改为x< total,因为数组的索引是从0到total-1。(total是数组大小)
我正在尝试做一个实验,我应该从 numbers.txt 文件中找到模式。但是我在将数字存储在数组中时遇到了问题。我了解如何读取文件,但出于某种原因,当我尝试存储数字时,我得到了 java.util.NoSuchElementException
。我认为这意味着我正在使用的扫描仪没有其他任何东西可以读取,但我已经将该方法放入 try-catch 中,所以我不明白发生了什么。
这是问题的主要部分:
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());
}
如果您想查看本实验的其余部分,请查看其余代码:
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
/**
* lab 16.1
*
* @author (Raymond Ma)
* @version (1/3/15)
*/
public class firstLab {
public static void statistics() {
Scanner in;
Scanner inTwo;
Scanner inThree;
int total = 0;
double numbers = 0;
double num = 0;
double standardDeviation;
//Average part
try {
in = new Scanner(new File("numbers.txt"));
while (in.hasNextInt()) {
total += in.nextDouble();
numbers++;
}
}
catch (IOException i) {
System.out.println("Error: " + i.getMessage());
}
System.out.println("The Average of this huge list of integers is " + total/numbers);
//Standard deviation part
try {
inTwo = new Scanner(new File("numbers.txt"));
while (inTwo.hasNextInt()) {
num = Math.pow((inTwo.nextDouble() - (total/numbers)),2);
}
}
catch (IOException i) {
System.out.println("Error: " + i.getMessage());
}
standardDeviation = Math.sqrt(num/(numbers-1));
System.out.println("The Standard Deviation of this huge list of integers is " + standardDeviation);
//This is the most annoying part (the mode)
int [] modeArray = new int [total];
try {
inThree = new Scanner(new File("numbers.txt"));
for (int x = 0; x <= total; x++) {
modeArray[x] = inThree.nextInt();
}
}
catch(IOException i) {
System.out.println("Error: " + i.getMessage());
}
System.out.println("The Mode of this huge list of integers is ");// + )
}
}
正如您所怀疑的那样,您遇到了异常,因为文件中没有包含足够的整数。
此外,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());
}
NoSuchElementException
不是 IOException
。 (请参阅 Javadocs 中的对象层次结构树。)您必须 catch(NoSuchElementException i)
.
但是这里有两个问题:
- 在您的代码中,
total
是数字的总和,但您确实想在创建数组时使用numbers
。 (例如,对于数字 3、5、7,有 3 个数字——这就是您在创建数组大小时想要的数字——但total
将是 15。) - 在您的
for
循环中,您需要i < total
,而不是i <= total
。同样,如果你有三个数字,由于索引计数从 0 开始,数组中的最大索引不是大小 (3),而是大小 - 1 (2)。
NoSuchElementException
是 RuntimeException
,而不是 IOException
。所以不会被抓到。这是层次结构。
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.util.NoSuchElementException
VS.
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.io.IOException
您可以通过
更正此问题正在导入
java.util.NoSuchElementException
的异常(现在你只导入了IOException
)抓住它。 (例如:
catch(NoSuchElementException i)
)
此外,在您的 for
循环中:
for (int x = 0; x <= total; x++) {
modeArray[x] = inThree.nextInt();
}
将x<= total改为x< total,因为数组的索引是从0到total-1。(total是数组大小)