2016-04-30 58 views
-1

當我嘗試和運行程序這是計算機將返回:我不能讓我的程序進行測試:「顯示java.lang.NullPointerException」

LAST_NAMEFIRST_NAME您好Test1的的Test2 Test3的TEST4 TEST5平均

線程「main」中的異常java.lang.NullPointerException在 tests.Tests.main(Tests.java:132)C:\ Users \ Michael Jr \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Java 返回:1 BUILD FAILED(總時間:0秒)

package tests; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.text.DecimalFormat; 
import java.util.ArrayList; 
import java.util.List; 
/** 
* 
* @author Michael 
*/ 
public class Tests { 

    private String fname; 
    private String lname; 
    private int[] scores; 

    public Tests(String entry) 
    { 
     String[] data=entry.split(" "); 
     scores=new int[data.length-2]; 
     this.setFname(data[0]); 
     this.setLname(data[1]); 
     for(int i=2;i<data.length;i++) 
     { 
      scores[i-2]=Integer.parseInt(data[i]); 
     } 
    } 
    public int[] getScores() { 
     return scores; 
    } 
    public void setScores(int[] scores) { 
     this.scores = scores; 
    } 

    public static String getAverageScore(int[] a) 
    { 
     int sum=0; 
     for(int e:a) 
     { 
      sum+=e; 
     } 
     return new DecimalFormat("##.##").format((double)sum/(double)a.length); 
    } 

    public static void showAverage(List<Tests> e) 
    { 
     for(Tests s:e) 
     { 
      System.out.println(s); 
     } 
    } 
    public String getGrade() 
    { 
     double d=Double.parseDouble(Tests.getAverageScore(scores)); 
     if(d<=100 && d>=90) 
     { 
      return "A"; 
     } 
     else if(d<90 && d>=80) 
     { 
      return "B"; 
     } 
     else if(d<80 && d>=70) 
     { 
      return "C"; 
     } 
     else if(d<70 && d>=60) 
     { 
      return "D"; 
     } 
     else 
     { 
      return "F"; 
     } 
    } 
    public String getFname() { 
     return fname; 
    } 
    public void setFname(String fname) { 
     this.fname = fname; 
    } 
    public String getLname() { 
     return lname; 
    } 
    public void setLname(String lname) { 
     this.lname = lname; 
    } 
    public String toString() 
    { 
     return getFname()+"\t\t"+getLname()+"\t\t"+scores[0]+"\t\t"+scores[1]+"\t\t"+scores[2]+"\t\t"+scores[3]+"\t\t"+scores[4]+"\t\t"+getAverageScore(scores)+"\t\t"+getGrade(); 
    } 

    public static ArrayList<Tests> read(String path) 
    { 
     BufferedReader br = null; 
     try { 

      String sCurrentLine; 
      ArrayList<Tests> ar=new ArrayList<Tests>(); 
      br = new BufferedReader(new FileReader("C:\\Users\\Michael Jr\\Desktop\\ch9_Ex13Data.txt")); 

      while ((sCurrentLine = br.readLine()) != null) 
      { 
       ar.add(new Tests(sCurrentLine)); 
      } 
      return ar; 

     } 
     catch (Exception e) 
     { 

     } 
     finally { 
      try { 
       if (br != null)br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
     return null; 
    } 
    public static void main(String[] a) 
    { 
     ArrayList<Tests> ar=read("E:/score.txt"); 
     System.out.println("First_Name\tLast_Name\tTest1\t\tTest2\t\tTest3\t\tTest4\t\tTest5\t\tAverage\t\tGrade"); 
     for(Tests e:ar) 
     { 
      System.out.println(e); 
     } 
    } 
} 
+0

錯誤在132行。那裏的代碼是什麼? – markt

+0

你*確實讓你的程序編譯。否則,你永遠不會得到運行時異常,這在運行時會發生。 – EJP

回答

0

您應該檢查你的閱讀功能的結果:

public static void main(String[] a) 
    { 
     ArrayList<Tests> ar=read("E:/score.txt"); 
     if (ar != null){ 
      System.out.println("First_Name\tLast_Name\tTest1\t\tTest2\t\tTest3\t\tTest4 \t\tTest5\t\tAverage\t\tGrade"); 
      for(Tests e:ar) 
      { 
       System.out.println(e); 
      } 
     } else { 
      System.out.println("Could not read file"); 
     } 
    } 
+0

或者使讀取方法總是返回一個列表而不是null –

+0

這修復了null問題,但是現在不能讀取文件?我的位置恰到好處。 – mikeg4523

+0

您傳遞的值爲「E:/score.txt」作爲路徑,但是從硬編碼的路徑「C:\\ Users \\ Michael Jr \\ Desktop \\ ch9_Ex13Data.txt」中讀取 - 其中文件你想讀嗎?也許這是一個權限問題? – markt

0

你驗證try聲明?讀函數返回「空」的值。我認爲這個問題是當你閱讀文件時。

String sCurrentLine; 
     ArrayList<Tests> ar=new ArrayList<Tests>(); 
     br = new BufferedReader(new FileReader("C:\\Users\\Michael Jr\\Desktop\\ch9_Ex13Data.txt")); 

     while ((sCurrentLine = br.readLine()) != null) 
     { 
      ar.add(new Tests(sCurrentLine)); 
     } 
     return ar; 

如果您能夠共享文件,我將驗證此代碼是否正確!

+0

程序試圖讀取的文件內容如下。 – mikeg4523

+0

傑克·約翰遜85 83 77 91 76 莉莎安妮斯頓80 90 95 93 48 安迪庫珀78 81 11 90 73 拉維古普塔92 83 30 69 87 邦尼布萊爾23 45 96 38 59 丹尼克拉克60 85 45 39 67 薩曼莎肯尼迪77 31 52 74 83 羅賓布朗森93 94 89 77 97 希拉陽光79 85 28 93 82 基蘭史密斯85 72 49 75 63 @Evinton – mikeg4523

+0

當您使用DecimalFormat的工作中,首先,驗證在計算機編碼你的筆記本電腦或臺式電腦。 ((double)sum /(double)a.length);' change'。'格式((double)sum /(double)a.length);' @ mikeg4523 –

相關問題