2018-2019-2 20175310实验一《Java开发环境的熟悉》实验报告
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.java和MyDCTester.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开发环境的熟悉》实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...
- 20165327《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...
- 20165205 实验一 java开发环境的熟悉 实验报告
20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 20162327实验一Java开发环境的熟悉实验报告
20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...
- 实验一Java开发环境的熟悉
实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...
- 20175316 盛茂淞 实验一 Java开发环境的熟悉
20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...
- 20155327实验一 Java开发环境的熟悉
20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...
- 20165233 实验一 Java开发环境的熟悉
20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...
- 20155231 java实验一 Java开发环境的熟悉
20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...
随机推荐
- HTML浏览器标题栏如何设置
浏览器标题栏如何设置 只需要在HTML中的 <head></head> 内加入 “Link’’ 和 “Title” 标签即可.献上代码: <head> <me ...
- FUNCTIONALITY OF ITEM CATEGORY
Item Category Purpose This wiki page will breify discuss about functionality of Item Category in SAP ...
- GIS开发之数据查询
在GIS开发之我们经常会用到属性查询和空间查询,特别是在数据量比较大的时候,如何提高查询效率成为一个问题 1.属性查询 对于属性查询,除了必要的建索引之外,我们还应该考虑使用字段缓存:减少查询字段,减 ...
- Android IPC机制(三)使用AIDL实现跨进程方法调用
上一篇文章中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户 ...
- Linux命令工作中常用总结
1. 搜索 在vi和vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜索定位: 在vi和vim界面中输入:"/"(反斜杠),之后会出现一个输入框让 ...
- Spark WordCount 文档词频计数
一.使用数据 Apache Spark is a fast and general-purpose cluster computing system.It provides high-level AP ...
- windows10 专业版的远程服务器管理工具下载
一.安装远程服务器管理工具: 下载地址: https://www.microsoft.com/zh-cn/download/details.aspx?id=45520 二.关闭远程服务器管理工具: 1 ...
- MySQL 授予普通用户PROCESS权限
在MySQL中如何给普通用户授予查看所有用户线程/连接的权限,当然,默认情况下show processlist是可以查看当前用户的线程/连接的. mysql> grant process on ...
- MHA快速搭建
很早之前写过MHA的文章,但是常常在技术群看到有同学问MHA搭建的问题,不是权限问题就是配置问题,我在这里就再次一写下配置过程以及快速的搭建.如果想知道更多的细节与原理,请参考:MySQL高可用架构之 ...
- 通过linkserver不能调远程表值函数
Question: 通过linkserver调远程表值函数报错如下 Solution: 注意:查询语句中的[SDS_NONEDI].[DBO].ddddd(),不能加server名[sdsc2-1]. ...