我正在尝试做一个实验室,我应该从 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());
}
如果您想看到实验室的其他部分,请参阅其余代码:
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 ");// + )
}
}
答案 0 :(得分:3)
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&lt; = total更改为x&lt; total,因为数组的索引从0到total-1。(total是数组大小)
答案 1 :(得分:1)
您收到异常,因为您怀疑该文件没有包含足够的整数。
此外,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());
}
答案 2 :(得分:1)
NoSuchElementException
不是IOException
。 (请参阅Javadocs中的对象层次结构树。)您必须catch(NoSuchElementException i)
。
但这里有两个问题:
total
是数字的总和,但您确实希望在创建数组时使用numbers
。 (例如,对于数字3,5,7,有3个数字 - 这是您在创建数组大小时所需要的 - 但total
将为15。)for
循环中,您需要i < total
,而不是i <= total
。同样,如果你有三个数字,因为索引计数从0开始,数组中的最大索引不是size(3),而是size - 1(2)。