20145221 《Java程序設計》實驗報告一:Java開發環境的熟悉(Windows+IDEA)

20145221 《Java程序設計》實驗報告一:Java開發環境的熟悉(Windows+IDEA)

實驗要求

  • 使用JDK編譯、運行簡單的Java程序;
  • 使用IDEA 編輯、編譯、運行、調試Java程序。

實驗內容

  • 命令行下Java程序開發
  • IDEA下Java程序開發、調試
  • 練習(經過命令行和IDEA兩種方式實現,在IDEA下練習調試程序)
  • 實現四則運算,並進行測試

實驗步驟(實現四則運算,並進行測試)

前期準備

  1. 預先安裝好JDK,並配置好環境變量,相關操做在 Hello Java ! 中已經進行了說明;
  2. 繼續下載idealC-2016.1.1,安裝完畢後在IDEA界面中配置JDK,爲後期運行IDEA調試程序作準備。

需求分析

  1. 四則運算,即要實現基本的加、減、乘、除運算法則,並使結果能在屏幕上正確輸出;
  2. 須要一個主類,設置主函數,提供輸入、輸出功能,實現計算功能;
  3. 須要一個「計算器」類,提供「加、減、乘、除」這樣一個算法,供主函數調用;
  4. 須要一個測試類,對基本的易錯的輸入實例進行測試,檢驗功能完整性。

設計

  1. 計算器類的設計:
    • 該類不含主函數,僅供調用使用;
    • 設計私有成員變量resultflag,result用來記錄各個功能函數的計算結果,flag用來判斷除法運算是否合法;
    • 設計四個計算功能的函數,分別實現加減乘除功能,並經過this.result來返回計算結果,經過this.flag返回判斷是否合法的結果;
    • 設計兩個取值功能的函數,由於resultflag是私有成員變量,不能由別的類直接進行取值,因此設計兩個取值的函數,分別爲getResult()isFlag()
  2. 主類的設計:
    • 首先要定義接口:java.util.Scanner;,提供用戶輸入的功能;
    • 定義主函數,記錄三個輸入變量,分別是左右操做數(double型),以及中間的運算符(字符串型);
    • 定義計算器類類變量,實現調用計算器類的功能,針對不一樣的運算符調用不一樣功能的計算函數,進而實現計算;
    • 將結果進行輸出。
  3. 測試類的設計:
    • 對一些易錯的輸入實例進行測試,須要調用主類;
    • 修改錯誤,完成測試。

代碼實現 & 測試

IDEA環境下開發:

  1. 打開IDEA,建立包"lab01",將實驗一全部代碼放在該包下,便於編譯運行調試;
  2. 分別建立class Calculatorclass CalculatorDemoclass CalculatorTest
  3. Calculator類代碼:
public class Calculator {
        private double result;
        private boolean flag = true;
        public void add(double a, double b){
            this.result = a + b;
        }
        public void subtract(double a, double b){
            this.result = a - b;
        }
        public void multiply(double a, double b){
            this.result = a * b;
        }
        public void divide(double a, double b){
            if(b != 0)
                this.result = a / b;
            else
                this.flag = false;
        }
        public double getResult(){
            return result;
        }
        public boolean isFlag(){
            return flag;
        }
    }
  1. CalculatorDemo類代碼:
import java.util.Scanner;
    public class CalculatorDemo {
        public static void main(String[] args) {
            Scanner scanner1 = new Scanner(System.in);
            Scanner scanner2 = new Scanner(System.in);
            Scanner scanner3 = new Scanner(System.in);
            Calculator calculator = new Calculator();
            System.out.print("First Number:   ");
            double a = scanner1.nextDouble();
            System.out.print("Calculate Type:   ");
            String type = scanner2.next();
            System.out.print("Second Number:   ");
            double b = scanner3.nextDouble();
            switch (type){
                case "+":
                    calculator.add(a, b);
                    System.out.println(calculator.getResult());
                    break;
                case "-":
                    calculator.subtract(a, b);
                    System.out.println(calculator.getResult());
                    break;
                case "*":
                    calculator.multiply(a, b);
                    System.out.println(calculator.getResult());
                    break;
                case "/":
                    calculator.divide(a, b);
                    if(calculator.isFlag()) {
                        System.out.println(calculator.getResult());
                        break;
                    }
                default:
                    System.out.println("Error!");
            }
        }
    }
  1. CalculatorTest類代碼:
public class CalculatorTest {
        public static void main(String[] args) {
            final double TEST1 = 2.7;
            final double TEST2 = 0;
            boolean flag = true;
            Calculator calculator = new Calculator();
            calculator.add(TEST1,TEST2);
            if(calculator.getResult() != TEST1) {
                flag = false;
                System.out.println("test failed 1!");
            }
            calculator.subtract(TEST1,TEST2);
            if(calculator.getResult() != TEST1){
                flag = false;
                System.out.println("test failed 2!");
            }
            calculator.multiply(TEST1,TEST2);
            if(calculator.getResult() != TEST2) {
                flag = false;
                System.out.println("test failed 3!");
            }
            calculator.divide(TEST1,TEST2);
            if(calculator.isFlag() != false) {
                flag = false;
                System.out.println("test failed 4!");
            }
            if(flag)
                System.out.println("test passed!");
        }
    }
  1. 調試
    • IDEA中調試很簡單,Ctrl+Shift+F10,便可編譯運行;
    • IDEA能夠邊編譯邊糾錯,因此編譯運行時沒有發現什麼錯誤;
    • 不過經過幫助同窗,學到了斷點調試單步執行等方法,可讓JVM只編譯你選中的部分,對其中的語法錯誤能夠一句一句糾錯,使得發現解決問題的時間大大提升,在此以前,只是按一下編譯的按鈕,出現錯誤,逐句查找,比較費時費力。
      html

命令行下開發:

  1. 代碼如上,在DOS命令行下編譯執行該代碼;
  2. 編譯 & 執行:
    • 在編譯時由於該三個類鈞屬於包lab01下,因此編譯時不能直接javac *.java,這樣雖然編譯能夠經過,但執行的時候不管輸入如下哪一種代碼都會出現以下報錯,提示找不到或者沒法加載主類Calculator:
      java

    • 因此在編譯CalculatorDemo.java文件時,須在命令行下輸入如下指令:javac -d . *.java,這樣,JVM會把編譯生成的.class文件放在文件夾lab01中,執行時輸入指令:java lab01.CalculatorDemojava lab01.CalculatorTest便可運行以上文件。
      算法

分析總結(遇到問題及解決辦法)

  • 拿到題目後,看見是四則運算,以爲很簡單,實現加減乘除不就好了,甚至函數都不用編寫,直接經過Java中的運算操做符,而後打印結果不就OK了,不過考慮到實驗是實踐代碼的最好機會,因此就準備運用本身所學,設計一臺計算器。
  • 問題一:在設計Calculator類時,其中有一個除法功能,當時沒顧慮太多,最後想着若是人家輸入的除數爲0怎麼辦?這樣,就一定要在divide()函數中加一些別的「特徵」,來告訴調用者除法輸入參數不合法!因此考慮到了經常使用的boolean型變量flag,先判斷除數是否爲0,若是爲0,則再也不進行除法運算,使flag置爲flase;若是不爲0,繼續除法運算,flag爲初始化的值true。這樣調用者能夠經過isFlag()函數的返回值來判斷是否輸入有誤。
  • 問題二:習慣了IDEA的集成開發環境,漸漸對傳統的命令行陌生了。爲了代碼管理的須要,我將本次實驗的三個類所有放在了包lab01中,這就使得用命令行編譯時要注意了。注意:不能直接使用javac命令編寫,由於這三個類屬於特定的包中,必需要用javac -d指令,這樣編譯的.class文件才能被java指令執行。
  • 問題三:仍然是命令行中出現的問題,不能單獨編譯一個Calculator.java文件(其中含有Calculator類變量),因爲剛開始對這一點比較模糊,編譯器反覆提示「找不到或者沒法加載主類」,最後才明白是由於Calculator類根本沒有編譯,JVM上哪去識別它呢,因此要將Calculator類與CalculatorDemo類一塊兒編譯才行,執行javac -d . *.java指令。

其餘(感悟、思考等,可選)

  • 這是Java第一次作實驗,,也是本身第一次使用對象封裝調用等完成了一個簡單的小程序。結果可能不重要,由於實現加減乘除並非很難的一個程序,重要的是在實現計算器功能的同時,讓我運用了平時學到的知識,將知識第一次付諸於實踐。本來對書本並不理解的知識點,在此次實驗中運用了一遍理解就更深入了,好比在本次實驗中用到的對對象封裝的技巧,設計出了一個「計算器」,它擁有加減乘除的基本功能,同時也能對輸入的對錯加以簡單的判斷。
  • 此次實驗也讓我感到一些不安,由於本身並不能徹底獨立的完成本次實驗。在代碼實現的階段中,有部分常常就忘記怎麼敲了,不能肯定是否如此,或者IDEA報了錯,看着錯誤類型不知道怎麼處理,只知道書中某一頁好像講了這個知識,因此本身只好從新翻課本尋求答案。這說明,在平時的學習過程當中,看人家代碼容易,本身手敲代碼仍是一件比較費力的事。讀懂代碼和會敲代碼是兩碼事,因此要在讀懂代碼的基礎上,多實踐,鍛鍊本身敲代碼的能力。

PSP(Personal Software Process)時間:

步驟 耗時 百分比
需求分析 10min 10%
設計 20min 20%
代碼實現 40min 40%
測試 15min 15%
分析總結 15min 15%

參考資料

相關文章
相關標籤/搜索