Java實驗報告一


南昌航空大學實驗報告

2021     9    17   

 

 

課程名稱:面向對象程序設計B            實驗名稱:       Java程序控制結構                                

學號:             姓名:           同組人:                                                

指導教師評定:                                      簽名:                                    

 

一、實驗目的

1、 1、熟悉Java開發及運行環境;

2、 掌握Java程序開發的基本步驟;

3、 了解Java+程序開發中的常見錯誤及其解決辦法;

4、 了解IDE的調試手段和工具。

 

二、實驗要求

1、對實驗中要求的代碼進行上機調試,完成實驗指導書中全部實驗內容。

2、編寫實驗報告。

三、實驗步驟

1、 Java開發環境的配置

1)在命令行下運行java versionjavac version,查看機器上安裝的Java版本並檢查Java開發環境是否配置正確;

2)如果環境配置不正確,請修改系統環境變量path配置開發環境。

 

2、 由單個類組成的Java程序的編寫與運行;

1)采用記事本編寫下面所給的Java程序並保存為FirstProgram.java

 

class Test{

public static void main(){

System.out.println("Hello,my first java program!");

}

}

2)在命令行下運行javac FirstProgram.java,並根據出現的提示信息修改程序直至程序編譯正確為止;

3)在命令行下運行java FirstProgram,並根據出現的提示信息修改程序直至程序運行正確為止;

運行以及調試如下:1.在命令行下運行結果如下:

 

 

 

2.代碼更正,將代碼中的Test改為FirstProgrammain方法后的括號里加上String arg[],如圖所示:

 

 

 

3由多個類組成的Java程序的編寫與運行;

1)在FirstProgram.java中添加以下代碼;

 

public class Another{

public void say(){

System.out.println("Another one.");

}

}

 

2)使用javac命令編譯程序,並根據出現的提示信息修改程序直至程序編譯正確為止;

3)使用java命令運行程序,並根據出現的提示信息修改程序直至程序運行正確為止。

運行及調試如下:

1.在命令行里運行里直接運行,報出一個錯誤,將class前面的public去掉,再次運行,只能輸出Hello,my first java program,無法輸出Another one:,在第一個類中進行調用,具體更改代碼以及運行截圖如下:

 

 

 

 

 

3、 調試程序,參考附件以及相關在線資料,調試以下程序。

1)以下代碼中有幾處語法錯誤和邏輯錯誤,請修正下面代碼的錯誤並輸出結果。

package experiment_1;

 

import java.util.Scanner;

/**

 * 分數的四則運算測試類

 */

public class FractionalCalculator {

public static void main(String[] args) {

Calculator cal;

 

// 輸入分數內容和運算符

Scanner input = new Scanner(System.in);

System.out.println("請分部輸入表達式");

System.out.println("請輸入參數1的分子:");

String data1 = input.next();

System.out.println("請輸入參數1的分母:");

String data2 = input.next();

System.out.println("請輸入運算符(+-*/)  :");

String operation = input.next();

System.out.println("請輸入參數2的分子:");

String data3 = input.next();

System.out.println("請輸入參數2的分母:");

String data4 = input.next();

 

// 運算並輸出

System.out.println("運算結果為:");

cal.compute(data1,data2, operation,data3,data4);

}

}

/**

 * 分數的四則運算類輸入:兩個以字符串構成的分數,輸出其相加的結果,結果仍以分數行式表示。

 */

int numerator;  // 分子

int denominator; // 分母

class Calculator {

 

/**設置分子分母

 * 輸入:正整數

 * 輸出:最簡分數式,分子分母不包含公約數

 */

void setNumeratorAndDenominator(int a, int b){  // 設置分子和分母

int c = gcd(a,b);         // 計算最大公約數

numerator = a / c

denominator = b / c;

}

 

int getNumerator(){

return numerator;

}

 

int getDenominator(){

return denominator;

}

/*greatest common divisor 求兩整數最大公約數,

 * 輸入:兩正整數a,b

 * 輸出:最大公約數b

 */

int gcd(int a,int b){  

if(a < b){

int c = a;

a = b;

b = c;

}

int r = a % b;

while(r > 0){

a = b;

b = r;

r = a % b;

}

}

 

Calculator add(Calculator r){  // 加法運算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b + denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator();

result.setNumeratorAndDenominator(newNumerator, newDenominator);

return result;

}

 

Calculator add(Calculator r){  // 減法運算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b - denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator();

result.setNumeratorAndDenominator(newNumerator, newDenominator);

return result;

}

// 轉化輸入格式,判斷並輸出運算結果,代碼中僅包含加法運算的內容,其他運算不用補齊,調試程序時注意只調試加法運算。

public static void compute(String data1,String data2,String operation,String data3,String data4){

 

    int data1_1 = Math.abs(Long.parseLong(data1));

    int data1_2 = Math.abs(Long.parseLong(data2));

    int data2_1 = Math.abs(Long.parseLong(data3));

    int data2_2 = Math.abs(Long.parseLong(data4));

         

Calculator r1 = new Calculator();

r1.setNumeratorAndDenominator(data1_2, data1_2);

Calculator r2 = new Calculator();

r2.setNumeratorAndDenominator(data2_1, data2_2);

 

Calculator result;

int a,b;

if(operation.equals("+")){

  result = r1.add(r2);

a = result.getNumerator();

  b = result.getDenominator();

  System.out.println(data1+"/"+data2+" "+operation+" " +data3+"/"+data4+" = " + a + "/" + b);

}

}

}

   運行及調試如下:1.輸入代碼測試如下圖所示:(1)28行出現錯誤,更改應該將int numerator;int denominator;挪到第二個類當中去。

 

 

 

(2)42行末尾少了分號。

 

 

(3)缺少返回值;改正:在68以及69行之間加上return b;

 

 

 

4)72與82行函數命名重復,下面的應該是減法函數,更改:將第二個add改為sub。

 

 

 

5)這四點錯誤是應該強制改為int類型而不是long類型,應該將Long.parseLong都改為Integer.parseInt

 

 

 

(6)代碼成功運行后,但是進行計算得出的結果有誤如下圖所示:

 

 

經過查看代碼發現102行的代碼第一個data1_2應該改為data1_1。

 

四、實驗結果    

第一個實驗截圖:

 

 

結論:如果文件中只有一個類,文件名必須與類名一致,以及方法后面的括號用於傳參。

第二個實驗截圖:

 

 

結論:如果一個文件里有兩個類,第二個類無需加public,同時可通過第一個類來調用第二個類。

第三個實驗截圖:

 

 

結論:代碼書寫要注意,以及可以借助eclipse工具來對代碼進行調試分析。

五、實驗小結

通過這次實驗,了解一些代碼書寫命名規范比如說:如何在第一個類里調用第二個類,如何給文件命名,之前只是在課上與慕課上見老師演示,但是終歸沒有自己親自動手體會的那么深刻。也初步學會了使用eclipse工具,能利用eclipse方便的對代碼錯誤的地方進行調試。也通過上面的實驗更加進一步了解了什么叫做一切皆對象,一切皆類。

遇到的問題:剛開始做一二兩個實驗時沒法自己順利的找到問題,還得重新翻一下慕課,說明上課與慕課上的知識並未充分記牢,但通過實驗加深了我對這幾個點的印象,也說明了學Java這門課還得邊學邊練才能記的更加清楚,學的更加牢固。

、附錄

package experiment_1;

import java.util.Scanner;

/**

 * 分數的四則運算測試類

 */

public class FractionalCalculator {

public static void main(String[] args) {

Calculator cal=new Calculator();

 

// 輸入分數內容和運算符

Scanner input = new Scanner(System.in);

System.out.println("請分部輸入表達式");

System.out.println("請輸入參數1的分子:");

String data1 = input.next();

System.out.println("請輸入參數1的分母:");

String data2 = input.next();

System.out.println("請輸入運算符(+-*/)  ");

String operation = input.next();

System.out.println("請輸入參數2的分子:");

String data3 = input.next();

System.out.println("請輸入參數2的分母:");

String data4 = input.next();

 

// 運算並輸出

System.out.println("運算結果為:");

cal.compute(data1,data2,operation,data3,data4);

}

}

/**

 * 分數的四則運算類輸入:兩個以字符串構成的分數,輸出其相加的結果,結果仍以分數行式表示。

 */

 

class Calculator {

int numerator;  // 分子

int denominator; // 分母

/**設置分子分母

 * 輸入:正整數

 * 輸出:最簡分數式,分子分母不包含公約數

 */

void setNumeratorAndDenominator(int a, int b){  // 設置分子和分母

int c = gcd(a,b);         // 計算最大公約數

numerator = a / c;

denominator = b / c;

}

 

int getNumerator(){

return numerator;

}

 

int getDenominator(){

return denominator;

}

/*greatest common divisor 求兩整數最大公約數,

 * 輸入:兩正整數a,b

 * 輸出:最大公約數b

 */

int gcd(int a,int b){

if(a < b){

int c = a;

a = b;

b = c;

}

int r=0;

if(b!=0)

r = a % b;

while(r > 0){

a = b;

b = r;

r = a % b;

}

return b;

}

 

Calculator add(Calculator r){  // 加法運算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b + denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator();

result.setNumeratorAndDenominator(newNumerator, newDenominator);

return result;

}

 

Calculator sub(Calculator r){  // 減法運算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b - denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator();

result.setNumeratorAndDenominator(newNumerator, newDenominator);

return result;

}

// 轉化輸入格式,判斷並輸出運算結果,代碼中僅包含加法運算的內容,其他運算不用補齊,調試程序時注意只調試加法運算。

public void compute(String data1,String data2,String operation,String data3,String data4){

 

    int data1_1 = Math.abs(Integer.parseInt(data1));

    int data1_2 = Math.abs(Integer.parseInt(data2));

    int data2_1 = Math.abs(Integer.parseInt(data3));

    int data2_2 = Math.abs(Integer.parseInt(data4));

         

Calculator r1 = new Calculator();

r1.setNumeratorAndDenominator(data1_1, data1_2);

Calculator r2 = new Calculator();

r2.setNumeratorAndDenominator(data2_1, data2_2);

 

Calculator result;

int a,b;

if(operation.equals("+")){

  result = r1.add(r2);

a = result.getNumerator();

  b = result.getDenominator();

  System.out.println(data1+"/"+data2+" "+operation+" " +data3+"/"+data4+" = " + a + "/" + b);

}

}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM