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. POJ1275 Cashier Employment(差分约束)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9078   Accepted: 3515 Description A sup ...

  2. SAP MM 物料主数据MRP2 视图’Minimum Lot Size’字段

    SAP MM 物料主数据MRP2 视图’Minimum Lot Size’字段 如下物料号,MRP2视图中,维护了最小采购量为500. MRP type : PD Lot size: EX Minim ...

  3. ReactNative编写规范

    <一>  React 代码规范 文件与组件命名 扩展名: 使用.js作为js文件的扩展名.如果同一个文件夹下有同名而不同作用的js文件,则通过中缀(小写)进一步区分,例如:HomePage ...

  4. 2014年11月17~11月18日,杨学明老师《企业IT需求收集和实施》内训在湖南长沙某酒店成功举办!

    2014年11月17至18日,受湖南某软件企业的邀请,杨学明老师<企业IT需求收集和实施>内训在某长沙某五星级酒店成功举办!来自全国各地的IT高管和企业负责人参加了此次培训.杨学明老师分别 ...

  5. jQuery 实现文字不停闪烁效果

    使用jQuery实现的小效果:文字不停地闪烁. var flag = true; var text= $('#blink').text(); // blink是需要闪烁的元素id function b ...

  6. [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt

    [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt --//昨天看了https://jonathanlewis.wordpress.com/2017/06/0 ...

  7. Python 输出格式符号

    Python 常见的输出格式符号

  8. Linux: yum 命令说明

    yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性 ...

  9. 《Java大学教程》—第12章 案例研究--第2部分

    本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1.    正确运行2.    Runhostel.java3.    searchButton

  10. [docker][win10]安装的坑

    右键这个小图标,先signin,注意这里是ID 不是邮箱   image.png 可能starting 时候就报错说 “Containers feature is not enabled” 或者   ...