我编写了代码(如下),我希望在文件中添加所有有效整数,并忽略任何无效的代码。目前,停止 无效值并且不会继续。
intnumbers.txt
22
33
44
55
66
ss
77
88
99
import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;
public class HandleExceptions {
public static void main(String[] args) {
int total = 0;
int number;
try {
File inFile = new File("intnumbers.txt");
Scanner fileScanner= new Scanner(inFile);
while (fileScanner.hasNextInt()) {
number = fileScanner.nextInt(); // Checks to see the next double in the text file
total = total + number;
System.out.println(number);
}
fileScanner.close();
}
catch (FileNotFoundException e) {
System.err.println("No such file name");
}
catch (InputMismatchException e) {
System.err.println("Data incorrect type expecting an int");
}
System.out.println("Finished");
System.out.println("Total is:" + total);
}
}
示例输出:
22
33
44
55
66
Finished
Total is:220
答案 0 :(得分:2)
试试这个吗?有一个时获取一个整数,或者只是跳过它。
int total = 0;
int number;
try {
File inFile = new File("intnumbers.txt");
Scanner fileScanner= new Scanner(inFile);
while (fileScanner.hasNext())
{
if(fileScanner.hasNextInt()) // Check for an valid integer
{
number = fileScanner.nextInt(); // Gets the integer
total = total + number; // Add it to the total
System.out.println(number);
}
else
{
fileScanner.next(); // Skip invalid input
// System.out.println("Data incorrect type, expecting an int");
}
}
fileScanner.close();
}
catch (FileNotFoundException e) {
System.err.println("No such file name");
}
catch (InputMismatchException e)
{
// If an exception is thrown for an invalid data type
// Your loop will not run to completion
System.err.println("Data incorrect type expecting an int");
}
System.out.println("Finished");
System.out.println("Total is:" + total);
<强>输出:强>
22
33
44
55
66
77
88
99
Finished
Total is:484
答案 1 :(得分:0)
您在循环中使用scanner.hasNextInt。根据文档,只要&#34; ss&#34;读(https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt%28%29)。
使其工作的一种方法是在循环条件中使用hasNextLine,然后检查该行是否为整数。
答案 2 :(得分:0)
您所拥有的条件是while (fileScanner.hasNextInt())
。
顾名思义,hasNextInt()
将检查下一个值是否为int。
当遇到ss
时,它将返回false并退出循环。
您需要使用say,hasNext()
修改强>
当您尝试将字符串ss
解析为整数时,会出现异常,
number = fileScanner.nextInt();
最好用try-catch尝试这个语句。
try{
number = fileScanner.nextInt();
}catch(NumberFormatException e){
}
答案 3 :(得分:0)
如果下一个没有int,则fileScanner.hasNextInt()返回false 所以虽然停在&#39; ss&#39;并且必须如此......
你必须写
while (fileScanner.hasNext())
{
try{
number = Integer.pasrseInt(fileScanner.next()); /
}
catch(Exception ex) {}
}
)
答案 4 :(得分:0)
Scanner API doc描述了hasNextInt
方法的功能如下:
如果使用nextInt()方法可以将此扫描程序输入中的下一个标记解释为默认基数中的int值,则返回true。
由于ss
不能解释为int,因此循环将退出。我建议改为使用hasNext
或hasNextLine()
。