簡體   English   中英

計算文件中數字平均值的程序(涉及 try/catch 塊)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM