Java实验报告一

您所在的位置:网站首页 数据结构实验步骤怎么写 Java实验报告一

Java实验报告一

#Java实验报告一| 来源: 网络整理| 查看: 265

南昌航空大学实验报告

2021   年  9  月  17   日

 

 

课程名称:面向对象程序设计B            实验名称:       Java程序控制结构                                

学号:             姓名:           同组人:                                                

指导教师评定:                                      签名:                                    

 

一、实验目的

1、 1、熟悉Java开发及运行环境;

2、 掌握Java程序开发的基本步骤;

3、 了解Java+程序开发中的常见错误及其解决办法;

4、 了解IDE的调试手段和工具。

 

二、实验要求

1、对实验中要求的代码进行上机调试,完成实验指导书中全部实验内容。

2、编写实验报告。

三、实验步骤

1、 Java开发环境的配置

(1)在命令行下运行java –version及javac –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改为FirstProgram,main方法后的括号里加上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);

}

}

}

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3