2018-2019-2 20175310实验一《Java开发环境的熟悉》实验报告

一、实验步骤及内容

(一)、Java开发环境的熟悉-1

1、建立20175310exp1的目录

2、在20175310exp1目录下建立src,bin等目录

3、javac,java的执行在20175310exp1目录

(二)、IDEA中调试设置条件断点

1、创建HelloWorld项目,新建「HelloJDB」类,输入代码。

2、设置断点和单步运行。设置断点只要在设置断点的行号旁用鼠标单击一下,如图,在第5行设置一个断点:

3、单击菜单「Run」->「Debug...」调试Java程序,我们可以看到程序停留在了第5行,如下图所示:

4、可以通过条件断点解决循环内部出现的问题。设置条件断点,我们在第9行左边断点处单击鼠标右键,弹出断点属性框,我们设置条件i==50,如下图所示:

(三)、练习:实现简单四则运算(能支持分数,加减乘除,支持括号),并进行测试(正常情况,异常情况,边界情况)

代码:

import java.util.Stack;
import java.util.Scanner; public class sizeyunsuan { static Stack<Character> op = new Stack<>(); //计算后缀式的值
public static float calrp(String rp){//参数rp:后缀式
Stack<Float> v = new Stack<>();
char[] arr = rp.toCharArray();
int len = arr.length;
for(int i = 0; i < len; i++){
Character ch = arr[i]; // 如果是操作数,则推到堆栈
if(ch >= '0' && ch <= '9') v.push(Float.valueOf(ch - '0')); // 如果是运算符,则计算结果
// 在堆栈中有前2个操作数的情况下,将结果推送到堆栈中
else v.push(getv(ch, v.pop(), v.pop()));
}
return v.pop();//返回值return:表达式结果
} //将中缀式转换为后缀式
public static String getrp(String s){//参数s:中缀形式的字符串
char[] arr = s.toCharArray();
int len = arr.length;
String out = ""; for(int i = 0; i < len; i++){ //从左到右扫描中缀式
char ch = arr[i];
if(ch == ' ') continue;
if(ch >= '0' && ch <= '9') {// 如果是操作数,则直接输出
out+=ch;
continue;
} if(ch == '+' || ch == '-'){//如果遇到“+”或“-”,则从堆栈中弹出运算符,直到遇到“(”,然后输出,并进栈。
while(!op.empty() && (op.peek() != '('))
out+=op.pop();
op.push(ch);
continue;
} if(ch == '*' || ch == '/'){//如果是“*”或“/”,则退栈并输出,直到优先级较低或“(”将运算符进栈
while(!op.empty() && (op.peek() == '*' || op.peek() == '/'))
out+=op.pop();
op.push(ch);
continue;
} if(ch == '(') op.push(ch);//如果遇到“(”,则直接进栈 if(ch == ')'){ //如果遇到“)”一直退栈输出,直到退到“(”,弹出“(”
while(!op.empty() && op.peek() != '(')
out += op.pop();
op.pop();
continue;
}
}
while(!op.empty()) out += op.pop();
return out;//返回值return:后缀形式的字符串
} public static Float getv(char op, Float f1, Float f2){
if(op == '+') return f2 + f1;
else if(op == '-') return f2 - f1;
else if(op == '*') return f2 * f1;
else if(op == '/') return f2 / f1;
else return Float.valueOf(-0);
} public static void main(String[] args){
try{
Scanner reader=new Scanner(System.in);
System.out.println("请输入表达式:");
String exp=reader.nextLine();
System.out.println(calrp(getrp(exp)));
}
catch (Exception IOException) {
System.out.println("输入格式错误!");
}
} }

测试运行结果:

二、实验过程中遇到的问题以及解决方案

  • 问题1:

    参考了2016-2017-2 《Java 程序设计》课堂实践项目这篇博客,看到老师的参考代码,将MyDC.javaMyDCTester.java两个文件编译运行之后发现,这个代码只能实现表达式是后缀式的运算,当我们输入平时的运算式时提示出错。

  • 问题1解决方案:

    需要把我们平时使用的中缀式转换为后缀式(逆波兰式),再对逆波兰式进行计算结果,将中缀式转换为后缀式为类getrp,代码如下:
    public static String getrp(String s){//参数s:中缀形式的字符串
char[] arr = s.toCharArray();
int len = arr.length;
String out = ""; for(int i = 0; i < len; i++){ //从左到右扫描中缀式
char ch = arr[i];
if(ch == ' ') continue;
if(ch >= '0' && ch <= '9') {// 如果是操作数,则直接输出
out+=ch;
continue;
} if(ch == '+' || ch == '-'){//如果遇到“+”或“-”,则从堆栈中弹出运算符,直到遇到“(”,然后输出,并进栈。
while(!op.empty() && (op.peek() != '('))
out+=op.pop();
op.push(ch);
continue;
} if(ch == '*' || ch == '/'){//如果是“*”或“/”,则退栈并输出,直到优先级较低或“(”将运算符进栈
while(!op.empty() && (op.peek() == '*' || op.peek() == '/'))
out+=op.pop();
op.push(ch);
continue;
} if(ch == '(') op.push(ch);//如果遇到“(”,则直接进栈 if(ch == ')'){ //如果遇到“)”一直退栈输出,直到退到“(”,弹出“(”
while(!op.empty() && op.peek() != '(')
out += op.pop();
op.pop();
continue;
}
}
while(!op.empty()) out += op.pop();
return out;//返回值return:后缀形式的字符串
}
  • 问题2:

    没有检测输入格式错误的功能
  • 问题2解决方案:

    catch加入之后显示没有try



    catch一起加进去编译成功,而且有检测输入格式错误的功能

三、实验总结

在拿到题目之后觉得挺简单,没什么难度,但是开始做之后发现一点都不简单,我整理了以下遇到的问题,我的设计思路主要分以下几个步骤:

1、首先要能支持分数,因此输入输出的变量都应该设为double型。

2、其次这是能支持括号的四则运算,所以不能直接用加减乘除,需要用到“栈”的知识。而栈之前没有学过,只能参考老师、学长们的博客学习栈的用法。

3、老师博客中有写过四则运算的代码,但是那个输入是后缀式,我们习惯上用的是中缀式,参考了许多博客之后,我把将中缀式转换成后缀式的代码编写出来。

总的来说,这次代码编写过程不是很顺利,问题一个接着一个,有的时候解决了一个问题但又出现了新问题。这次的问题解决方式主要是参考别人写的博客,学习了有关于“栈”和将中缀式转换成后缀式这两块的写法。

4、PSP时间

步骤 耗时(min) 百分比
需求分析 20 11%
设计 30 17%
代码实现 75 44%
测试 25 14%
分析总结 20 11%

2018-2019-2 20175310实验一《Java开发环境的熟悉》实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...

  2. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...

  3. 20165327《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...

  4. 20165205 实验一 java开发环境的熟悉 实验报告

    20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...

  5. 20162327实验一Java开发环境的熟悉实验报告

    20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...

  6. 实验一Java开发环境的熟悉

    实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...

  7. 20175316 盛茂淞 实验一 Java开发环境的熟悉

    20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...

  8. 20155327实验一 Java开发环境的熟悉

    20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...

  9. 20165233 实验一 Java开发环境的熟悉

    20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...

  10. 20155231 java实验一 Java开发环境的熟悉

    20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...

随机推荐

  1. 大数据时代,Wyn Enterprise和您一起探讨CIO的困境和出路 ZT

    这是一篇知识分享帖,如果您致力于成为一名CIO,希望您能够阅读完,信息虽然简略,但我们依然希望可以帮到您. CIO:首席信息官 CIO是干什么的 一.经典的CIO主要负责什么 1.IT战略规划.IT预 ...

  2. Android 与Java 进程退出 killProcess与System.exit

    android所有activity都在主进程中,在清单文件Androidmanifest.xml中可以设置启动不同进程,Service需要指定运行在单独进程?主进程中的主线程?还是主进程中的其他线程? ...

  3. matlab练习程序(点云表面法向量)

    思路还是很容易想到的: 1.首先使用KD树寻找当前点邻域的N个点,这里取了10个,直接调用了vlfeat. 2.用最小二乘估计当前邻域点组成的平面,得到法向量. 3.根据当前邻域点平均值确定邻域质心, ...

  4. 四则运算 Java 杨辉鹏,郑冠华

    四则运算 Java 杨辉鹏,郑冠华 GitHub链接:https://github.com/yanghuipeng/arithmetic 项目相关要求 使用 -n 参数控制生成题目的个数,例如 -n ...

  5. Javascript 高级程序设计--总结【四】

    *******************************  Chapter 11 DOM扩展  ******************************* 主要的扩展是 选择符API 和 H ...

  6. python字符串处理以及字符串格式化

    一.python字符串处理 目录: 1.算长度(len),某个元素出现的次数(count) 2.切片   [ ],repr:把不可见字符显示出来 3.查找 #find,rfind从右边查找 4.字符串 ...

  7. IO测试工具之fio详解

    目前主流的第三方IO测试工具有fio.iometer和Orion,这三种工具各有千秋. fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的 ...

  8. #005Python实验楼基本操作学习笔记

    Ctrl + D 输入一个 EOF 字符来退出解释器,也可以键入 exit() 来退出解释器. 打开 Xfce 终端,键入 vim helloworld.py 来启动 Vim 并编辑 hellowor ...

  9. VS code常用的几个插件

    VScode是一个我最近才开始用的编辑器,在此列几个自己在用的插件,以备换机时的需要. auto close tagbeautify css/sass/scss/lessone dark themes ...

  10. 设计模式のNullObjectPattern(空对象模式)----行为模式

    一.产生背景 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查.Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可 ...