实验要求
- 使用JDK编译、运行简单的Java程序;
- 使用IDEA 编辑、编译、运行、调试Java程序。
实验内容
命令行下Java程序开发
- 打开windows下的cmd → 输入
cd Code
命令进入Code目录 → 输入md 20155321test
建立以自己学号命名的文件夹 → 输入cd 2015531`test
进入文件夹 → 输入md exp1
建立“实验一”文件夹 → 输入cd exp1
进入“实验一”文件夹
- 利用vim编辑器编辑java程序并在命令行环境下进行编译、运行
IDEA下Java程序开发、调试
- 建立HelloJDB类进行代码的调试:
- 在需要的地方设置断点
- 点击
dubug
进行单步调试
- 当循环内部出现问题时,可在相应的行数设置断点并右击,在出现的对话框里输入自己需要调试的数值,例如i==50,再使用快捷键F9即可得到运行结果。
实现四则运算,并进行测试
前期准备
- 安装JDK并配置环境变量
- 下载IEDA,安装完毕后在IDEA界面中配置JDK,为后期运行IDEA调试程序做好准备
需求分析
- 四则运算,即实现基本的加减乘除运算法则,最后使结果能在屏幕上正确输出
- 需要一个主类设置主函数,利用主函数来调用其他类实现输入与计算功能,注意主函数尽量简洁
- 需要一个“计算器”类,提供操作数的输入接口,供主函数调用
- 需要一个“四则运算”类,专门针对加减乘除运算进行处理,此类被“计算器”类调用
设计
- 四则运算类的设计
- 专门被计算器类进行调用,接收计算器类向此类传递的2个操作数和1个操作符
- 根据不同的操作符进行运算,并输出结果
- 计算器类的设计
- 声明
java.util.Scanner;
以提供用户输入2个操作数和1个操作符的功能; - 声明
java.math.BigDecimal;
,具体原因后面进行分析 - 该类被主类调用使用
- 该类调用四则运算类,向四则运算类传递用户输入的值
- 主类的设计
- 因为在计算器类中已经把所有的功能进行了封装,因此主类只需要创建一个计算器类对象
- 创建好对象后只需调用此类中的方法即可
代码实现 & 测试
IDEA环境下开发
- 打开IDEA,将实验一所有代码放在exp1包下,便于编译运行调试
- 分别创建
class SiZeYunSuan
、class Calculator
、class CalculatorTest
- SiZeYunSuan代码
class SiZeYunSuan {
private BigDecimal a;
private BigDecimal b;
private String c;
void fun(BigDecimal a, BigDecimal b, String c) {
switch (c) {
case "+":
System.out.println(a.add(b));
break;
case "-":
System.out.println(a.subtract(b));
break;
case "*":
System.out.println(a.multiply(b));
break;
case "/":
if (b.equals(0))
System.out.println("Error !");
else {
System.out.println(a.divide(b));
break;
}
default:
System.out.println("Error!");
}
}
}
- Calculator代码
class Calculator{
private BigDecimal a;
private BigDecimal b;
private String c;
void seta(BigDecimal a){
a = this.a;
}
BigDecimal geta() {
return a;
}
void setb(BigDecimal b){
b = this.b;
}
BigDecimal getb() {
return b;
}
void setc(String c){
c = this.c;
}
String getc() {
return c;
}
void printFuntion(){
Scanner scanner1 = new Scanner(System.in); //第一个操作符
Scanner scanner2 = new Scanner(System.in); //第二个操作符
Scanner scanner3 = new Scanner(System.in); //第三个操作符
System.out.println("请输入第一个操作数");
a = scanner1.nextBigDecimal();
System.out.println("请输入第二个操作数");
b = scanner2.nextBigDecimal();
System.out.println("请输入操作符");
c = scanner3.next();
SiZeYunSuan siZeYunSuan = new SiZeYunSuan();
siZeYunSuan.fun(a,b,c);
}
}
- CalculatorTest(主类,包含主函数)代码
public class CalculatorTest {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.printFuntion();
}
}
- 调试
- 组合键
Ctrl+Shift+F10
即可编译运行
- 在一开始调试的时候,输入类似的值时无法得到一个精确的答案,例如答案应是0.5的时候程序显示的结果却是0.499999,结合课本的知识我知道因为我把操作数的类型定义为double型,而这是不精确的。在调试下我便使用BigDecimal类把数据进行一定的处理并使用这个类中原本就存在的加减乘除函数,最终便可得到精确答案
命令行下开发
- 代码一样,在DOS命令行下编译执行该代码
- 在命令行下运行出现了乱码问题
看了20155303同学的博客知道因为windows下默认的编码方式与IDEA设置的编码方式不同,将编码方式转为UTF-8即可成功运行。
分析总结(遇到问题及解决办法)
- 此次我的题目是四则运算,因为之前有用C语言编过相关的程序,所以刚开始编写的时候还觉得挺简单的。但是在真正编程的时候就遇到了一些问题,通过反复尝试最终调试成功。
- 问题一:在四则运算中若输入double型的数据,计算的结果可能不够精确
解决方案:根据书本上介绍过的方法,利用BigDecimal进行封装 - 问题二:在是命令行中出现了乱码问题,
解决方案:看了同学的博客后明白如何解决
其他
- 第一次的Java实验是我第一次封装对象并调用对象完成了一个简单的小程序。我发现在自己看到题目后思考和编程的过程中都更加倾向于面向过程,而不是面向对象。可能之前一直在使用C语言以及目前除了Java课外其它的课均是使用C语言进行编程,因此很容易编程面向过程的样子,特别是本次实验的内容也不是很难,对面向对象的编程方式,把功能封装成对象再调用对象这种模式有些陌生,之后还要改变一下思考模式
- 本次实验总的来说不是很困难,但是也提醒了我一件事。之前看书的时候看别人的代码觉得不难,但是在自己敲代码的过程中却发现这里有问题,那里又不确定,我觉得这个的原因一方面是看代码始终和敲代码之间有一定的差距,一方面是我们目前看的代码量也比较小。之后的学习中也要多注意这个问题
PSP(Personal Software Process)时间
步骤 | 耗时 | 百分比 |
需求分析 | 10min | 10% |
设计 | 10min | 10% |
代码实现 | 50min | 50% |
测试 | 15min | 15% |
分析总结 | 15min | 15% |