计算文件中数字平均值的程序(涉及 try/catch 个块)
Program that computes average of numbers from a file (try/catch blocks involved)
我有一个程序应该允许用户输入文件名,如果正确,它会计算文件中数字的平均值并将其打印出来。同样,如果用户多次输入错误的文件名,程序就会退出。在程序中,"try" 块应该实例化 Scanner 并将 fileOk 设置为 true,而 "catch" 块应该提示用户重新输入文件名,读取文件并递增 fileTry .第一个 "if" 语句也应该这样做,以便计算平均值或在输出文件中写入错误消息 (outNumbers.dat)。这是我到目前为止的代码:
package average;
import java.io.*;
import java.util.Scanner;
public class Try
{
static Scanner inFile;
public static void main(String[] args) throws IOException
{
int fileTry = 0;
String fileName;
Scanner inName = new Scanner(System.in);
System.out.println("Enter file name>");
fileName = inName.nextLine();
boolean fileOk;
do
{
fileOk = false;
try
{
Scanner file = new Scanner(new File(fileName));
fileOk = true;
}
catch(FileNotFoundException error)
{
System.out.println("Reenter file name>");
fileName = inFile.nextLine();
fileTry++;
}
} while (!fileOk && fileTry < 4);
PrintWriter outFile = new PrintWriter(new FileWriter("outNumbers.dat"));
if (fileName != null )
{
int numDays = 0;
double average;
double inches = 0.0;
double total = 0.0;
while (inFile.hasNextFloat())
{
inches = inFile.nextFloat();
total = total + inches;
outFile.println(inches);
numDays++;
}
if (numDays == 0)
System.out.println("Average cannot be computed " +
" for 0 days.");
else
{
average = total / numDays;
outFile.println("The average rainfall over " +
numDays + " days is " + average);
}
inFile.close();
}
else
System.out.println("Error");
outFile.close();
}
}
这里是正确文件的内容(inNumbers.dat):
2.3
3.1
0.3
1.1
2.2
2.1
0.0
0.4
0.76
0.5
1.0
0.5
这是我在 运行 程序并输入正确的文件名后得到的输出:
Enter file name>
inNumbers.dat
Exception in thread "main" java.lang.NullPointerException
at average.Try.main(Try.java:40)
我对如何解决这个问题有点迷茫:/
NullPointerException 在 java 中很常见。这通常意味着您正在尝试使用从未初始化的对象。在这种情况下,infile
仅被声明而从未被初始化。
Scanner file = new Scanner(new File(fileName));
file
变量仅存在于 try 块中,因为它是在此处声明的。您可能想改为初始化 infile
。
infile = new Scanner(new File(fileName));
我有一个程序应该允许用户输入文件名,如果正确,它会计算文件中数字的平均值并将其打印出来。同样,如果用户多次输入错误的文件名,程序就会退出。在程序中,"try" 块应该实例化 Scanner 并将 fileOk 设置为 true,而 "catch" 块应该提示用户重新输入文件名,读取文件并递增 fileTry .第一个 "if" 语句也应该这样做,以便计算平均值或在输出文件中写入错误消息 (outNumbers.dat)。这是我到目前为止的代码:
package average;
import java.io.*;
import java.util.Scanner;
public class Try
{
static Scanner inFile;
public static void main(String[] args) throws IOException
{
int fileTry = 0;
String fileName;
Scanner inName = new Scanner(System.in);
System.out.println("Enter file name>");
fileName = inName.nextLine();
boolean fileOk;
do
{
fileOk = false;
try
{
Scanner file = new Scanner(new File(fileName));
fileOk = true;
}
catch(FileNotFoundException error)
{
System.out.println("Reenter file name>");
fileName = inFile.nextLine();
fileTry++;
}
} while (!fileOk && fileTry < 4);
PrintWriter outFile = new PrintWriter(new FileWriter("outNumbers.dat"));
if (fileName != null )
{
int numDays = 0;
double average;
double inches = 0.0;
double total = 0.0;
while (inFile.hasNextFloat())
{
inches = inFile.nextFloat();
total = total + inches;
outFile.println(inches);
numDays++;
}
if (numDays == 0)
System.out.println("Average cannot be computed " +
" for 0 days.");
else
{
average = total / numDays;
outFile.println("The average rainfall over " +
numDays + " days is " + average);
}
inFile.close();
}
else
System.out.println("Error");
outFile.close();
}
}
这里是正确文件的内容(inNumbers.dat):
2.3
3.1
0.3
1.1
2.2
2.1
0.0
0.4
0.76
0.5
1.0
0.5
这是我在 运行 程序并输入正确的文件名后得到的输出:
Enter file name>
inNumbers.dat
Exception in thread "main" java.lang.NullPointerException
at average.Try.main(Try.java:40)
我对如何解决这个问题有点迷茫:/
NullPointerException 在 java 中很常见。这通常意味着您正在尝试使用从未初始化的对象。在这种情况下,infile
仅被声明而从未被初始化。
Scanner file = new Scanner(new File(fileName));
file
变量仅存在于 try 块中,因为它是在此处声明的。您可能想改为初始化 infile
。
infile = new Scanner(new File(fileName));