[英]Program that computes average of numbers from a file (try/catch blocks involved)
我有一個程序應該允許用戶輸入一個文件名,如果正確的話,它會計算文件中數字的平均值並將其打印出來。 同樣,如果用戶多次輸入錯誤的文件名,程序就會退出。 在程序中,“try”塊應該實例化 Scanner 並將 fileOk 設置為 true,而“catch”塊應該提示用戶重新輸入文件名、讀取文件並遞增 fileTry。 第一個“if”語句也應該如此,以便計算平均值或將錯誤消息寫入 output 文件 (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
這是運行程序並輸入正確的文件名后得到的 output:
Enter file name>
inNumbers.dat
Exception in thread "main" java.lang.NullPointerException
at average.Try.main(Try.java:40)
我對如何解決這個問題有點迷茫:/
NullPointerException 在 java 中很常見。這通常意味着您正在嘗試使用從未初始化過的 object。 在這種情況下, infile
僅被聲明而從未被初始化。
Scanner file = new Scanner(new File(fileName));
file
變量只存在於 try 塊中,因為這是它被聲明的地方。 您可能想改為初始化infile
。
infile = new Scanner(new File(fileName));
我有一個程序應該允許用戶輸入文件名,如果正確,它會計算文件中數字的平均值並將其打印出來。 同樣,如果用戶輸入錯誤的文件名一定次數,則程序退出。 在程序中,“try”塊應該實例化Scanner並將fileOk設置為true,而“catch”塊應該提示用戶重新輸入文件名,讀取文件,並增加fileTry。 第一個“if”語句也應該用來計算平均值或在 output 文件 (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
這是我在運行程序並輸入正確的文件名后得到的 output:
Enter file name>
inNumbers.dat
Exception in thread "main" java.lang.NullPointerException
at average.Try.main(Try.java:40)
我對如何解決這個問題有點迷茫:/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.