《Java程式設計》第一次作業:原始碼計算機,
目的:(1)一門語言入門,需要編寫至少2萬行代碼。那麼,我們編寫一個計算程式碼數的程式,激勵自己前行。(2)瞭解代碼複用、重構的作用。
目標(遞進關係,難度從小到大): 目標1:給定一個原始碼檔案(.cs, .java),輸出該檔案的總行數、空行數、注釋行數、程式碼數。 目標2:從命令列輸入一個參數(指定目錄或檔案),輸出該目錄下指定類型檔案(.cs, .java)的個數、每個檔案的總行數、空行數、注釋行數、程式碼數。 目標3:從命令列輸入兩個參數(第一個參數:指定目錄或檔案;第二個參數:指定類型檔案),輸出該目錄下指定類型檔案的個數、每個檔案的總行數、空行數、注釋行數、程式碼數。
計分方式(補充-新):
(1)完成 目標1,程式能夠運行,並得到結果,計80分;
(2)完成 目標2,程式能夠運行,並得到結果,計90分;
(3)完成 目標3,程式能夠運行,並得到結果,計100分;
互評同學,可以根據自己的理解,上下浮動10分。比如 注釋很完整、代碼很精鍊,則加分。完成多個目標,則只計算分值最高的作為本次作業的分數。
方法與步驟(參考,以目標1為例):(1)解讀題意:要得到什麼結果?腦海中類比其過程——給定一個檔案後,自己數一下總行數、空行數等。(2)目標分解:大概有哪幾個核心步驟?——開啟一個檔案;讀取檔案的一行;判斷此行的類型;檔案結尾的判斷;結果輸出(輸出到螢幕,or 輸出到檔案)。(3)代碼編寫:沒有學過寫代碼(java,or cs),baidu or google搜尋。——搜什麼呢?怎樣提問呢?(C#統計c、c++、C#程式碼數)哪些網站的內容可能更值得信賴?(程式員需要知道的N個網站)(4)調試與測試:我們的代碼有錯誤嗎?調試與測試見功底。——測試工程師的工作。如果輸入的檔案名稱不存在怎麼辦?存在但不是指定類型的檔案怎麼判斷?……(5)總結與提高:有哪些經驗與不足?寫下來,一方面提醒自己;另一方面,分享到部落格中,也協助其他人。比如:遇到過哪些問題,是怎樣解決的?命令列方式好不好,修改成有介面的版本,代碼重寫的多嗎?是否可以嘗試一下呢?
(1)完成 目標1,程式能夠運行,並得到結果,計80分;
package iotest;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class StaticsCodeingLine {private static int whiteLines = 0;private static int commentLines = 0;private static int normalLines = 0;/** * @param args */public static void main(String[] args) {File f = new File("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\TYH\\src\\iotest\\StaticsCodeingLine.java");//注意路徑 sumCode(f);}private static void sumCode(File file) { BufferedReader br = null; boolean comment = false; try { br = new BufferedReader(new FileReader(file)); String line = ""; try { while ((line = br.readLine()) != null) { line = line.trim(); if (line.matches("^[\\s&&[^\\n]]*$")) { whiteLines++; } else if (line.startsWith("/*") && !line.endsWith("*/")) { commentLines++; comment = true; } else if (true == comment) { commentLines++; if (line.endsWith("*/")) { comment = false; } } else if (line.startsWith("//")) { commentLines++; } else { normalLines++; } } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (br != null) { try { System.out.println("空行數:"+whiteLines);System.out.println("注釋行數:"+commentLines);System.out.println("程式碼數:"+normalLines);br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } }}