【留念贴】Android开发——计算器
【过程】
在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下。
本来准备一晚上搞定计算器的,但是当我看到那些天花乱坠的语法,简直蛋碎!最终吃起了烧烤。。。。下起了飞行棋。。。。五子棋。。。。还被虐!!。。。。T T
第二天又看了一下ChenYong的代码,感觉可以写了,理论上能做出来,但是没有装编译器.....因此花一晚上的时间去装.....终于跑起来了....但是不知道怎么导入工程.....因此只打开了一个能写代码的文件在那写.....连语法报错都没有,更别说能跑起来了.....最终失败了.....
第三天,在室友ZhangYiZhong的电脑上搞,他写语法,我写算法。终于一个半成品(还有不少的BUG)在我眼前诞生,说实话还是很激动的,我写的东西居然能够在手机上跑起来!!!多么不可思议的一回事!!!
从电脑控制台黑框到手机App的界面。一个历史性的转变.....

【技术】
关于这个计算器的一些技术,其核心是把中缀表达式转化为后缀表达式,这个时候需要使用一个最基础的数据结构——栈。
具体的操作原理可以参考这个博客 http://www.nowamagic.net/librarys/veda/detail/2307
然而,对于这个问题,早在上学期就已经解决了,但是那时候纯粹是为了Accepted HDU 1237 http://acm.hdu.edu.cn/showproblem.php?pid=1237 并没有为了要做出一个真正意义上能用的计算器App。这次开发的时候,直接把当年写的很挫的代码拉了下来用。
Android开发似乎用的都是Java,不得不说这是一种很好的语言,集成了很多很多有用的功能,需要的时候只需调用一下就行,不像C/C++那样,都要自己纯手打。
计算器核心代码如下:(当时连栈都是手动模拟的,加减乘除还是用的数字表示,代码好丑。。)
#include<stdio.h>
#include<string.h>
// + 999991
// - 999992
// * 999993
// / 999994
int stack1[];
double stack2[];
int a[], b[];
int main()
{
int i;
char s[];
while (gets(s))
{
if (strlen(s) == && s[] == '')break;
int y = strlen(s);
s[y] = ' '; s[y + ] = '\0';
int top1 = -, top2 = -, q = , sum = ;
for (i = ; i<strlen(s); i++)
{
if (s[i] == ' ' && (s[i - ]<'' || s[i - ]>'')) continue;
else if (s[i] == ' ')a[q] = sum, sum = , q++;
else if (s[i] == '+')a[q] = , q++;
else if (s[i] == '-')a[q] = , q++;
else if (s[i] == '*')a[q] = , q++;
else if (s[i] == '/')a[q] = , q++;
else if (s[i] >= ''&&s[i] <= '') sum = * sum + (s[i] - '');
}
//1到q-1;
// for(i=1;i<q;i++) printf("%d\n",a[i]); int qq = -;
for (i = ; i<q; i++)
{
if (a[i]<) qq++, b[qq] = a[i];
else if (a[i] >= )
{
if (top1 == -)//栈为空
{
top1++;
stack1[top1] = a[i];
}
else
{
if (a[i] == || a[i] == )
{
while ()
{
qq++;
b[qq] = stack1[top1];
top1--;
if (top1 == -) break;
}
top1++;
stack1[top1] = a[i];
}
else if (a[i] == || a[i] == )
{
while ()
{
if (stack1[top1] == || stack1[top1] == || top1 == -) break;
qq++;
b[qq] = stack1[top1];
top1--;
}
top1++;
stack1[top1] = a[i];
}
}
}
}
for (i = top1; i >= ; i--) qq++, b[qq] = stack1[i];
for (i = ; i <= qq; i++)
{
if (top2 == -)
{
top2++;
stack2[top2] = b[i];
}
else if (b[i]<) top2++, stack2[top2] = b[i];
else if (b[i] == )top2--, stack2[top2] = stack2[top2] + stack2[top2 + ];
else if (b[i] == )top2--, stack2[top2] = stack2[top2] - stack2[top2 + ];
else if (b[i] == )top2--, stack2[top2] = stack2[top2] * stack2[top2 + ];
else if (b[i] == )top2--, stack2[top2] = 1.0*stack2[top2] / stack2[top2 + ];
}
printf("%.2lf\n", stack2[]);
}
return ;
}
【感慨】
大学一年以来,在很多书上都看到了这句话:程序=算法+数据结构。那让我扩充一下吧,软件=程序+开发工具,即 软件=算法+数据结构+开发工具。正如这个计算器,从控制台的黑框界面通过开发工具,变成了能让人们使用的软件,算是一个重要的转折吧。程序设计竞赛竞赛考察的内容100%来源于算法+数据结构,对开发工具的考察等于零!而对于软件外包、服务外包那些竞赛,也许更着重于开发工具吧,因为要做出美丽的外观才能获得很好的奖励。我已经选择了软件工程专业,日后有很大的可能去搞项目开发(但似乎对算法研究与创新更加有兴趣),所以在竞赛之余还是要稍微接触一下开发方面的东西的。正如LvHao学长所言,他们需要T字型人才,如果大学期间单纯的只参加竞赛,那一竖确实很长很长,但缺少了那一横,并不是他们所需要的。
大一就这样结束了,参加了几场比赛,跟随God Wang大神与WuTianQi学长参加了省赛,拿到了Au,但我的水平远远不及他们,从蓝桥杯国赛他们两个是全国一等,我是二等就能看出差距。还记得去年开学的时候都不知道什么是C语言,跟着ChenYanHong导师和God Wang大神的步伐,一点一点的从0积累到了现在,下学期要学的数据结构,我和XiangRunYe似乎都基本啃完,图论的书啃到了网络流,最近还接触了一些动态规划和数论的东西,要学的知识还有很多很多。有一些比我们水平弱的小伙伴们,经常会膜拜为什么能解决一些他们解决不了的问题,正如我仰慕我校的God Wang、ZSTU的WuYiQi、SHU的KuangBin他们那样。如今,我觉得那只是时间的问题,因为我几乎把所有的时间都投入到了竞赛当中,编码能力与程序设计能力自然比别人稍微高了一点,时间久了,熟能生巧,当然这都要建立在善于思考、努力学习的基础上。而我们接触这些东西的时间也远远不及那些大神们,所以难以超越他们。
必须非常努力,才能看起来毫不费力。
【留念贴】Android开发——计算器的更多相关文章
- 【Android开发-4】进入实践,最喜欢折腾的计算器
前言:前面对项目文件有了感性认识.接下来我们就须要通过不断实践,对项目的文件有理性的认识. 曾经折腾Unity3d.IOS开发都是拿计算器开刀.所以这次Android开发实践也不例外,继续拿计算器折腾 ...
- Android 开发一定要看的15个实战项目
前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...
- Android开发自学笔记(Android Studio)—4.1布局组件
一.引言 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.在Android4.0之前,我们通常说 ...
- Android开发权威指南(第2版)新书发布
<Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...
- 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总
教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...
- 「Android 开发」入门笔记
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...
- Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?
hi大头鬼hi Android开发专家 先mark一下,好多人我发现始终停留在两三年的水平上没有突破. 另外还有一个误区就是越底层越牛逼 第三个就是,我认识的大部分所谓的做过rom开发的对fr ...
- Android开发笔记(3)——GridLayout
笔记链接:http://www.cnblogs.com/igoslly/p/6799939.html GirdLayout 计算器实例及详尽的笔记:http://www.cnblogs.com/sky ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
随机推荐
- 结构-行为-样式-Css笔记
0.常见的行级元素和块级元素: 行级元素:div,table,form ,ul,ol,p,h1-h6,hr; 块级元素:a,select,input,textarea,img,label,br,i, ...
- 【转】经典!python中使用xlrd、xlwt操作excel表格详解
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...
- 如何使用jconsole(英文)
http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html
- Tensorflow (1)
'tf.placeholder' or 'tf.Variable' The difference is that with tf.Variable you have to provide an ini ...
- Exchange 2010 实用小技巧
#Exchange安装必须开启防火墙服务 #批量建用户: for /f "tokens=1,2,3,4,5,6,7 delims=," %a in (c:\users.csv) ...
- CentOS7 安装 OpenSSL 1.0.1m 和 OpenSSH 6.8p1
# 下载软件 wget http://zlib.net/zlib-1.2.8.tar.gz wget ftp://ftp.openssl.org/source/openssl-1.0.1m.tar.g ...
- Chapter 2 Open Book——33
My chin raised a fraction. 我的下巴抬起来了一点. 我略微抬起下颚. "No, she did not send me here. I sent myself.&q ...
- springmvc注释
//请求json串(商品信息) 输出json(商品信息) //@RequestBody将请求的商品信息的json串转成itemsCustom对象 //@ResponseBody将itemsCus ...
- [转]Delphi中QuotedStr介绍及使用
转自:http://www.360doc.com/content/13/0524/09/7873422_287679198.shtml 使用S:string; qry2.SQL.add('select ...
- 前端自动化部署之gulp
1.首先需要安装node+npm(这里不再叙述,网上教程一大堆) 2.gulp全局安装:npm install -g gulp 3.cd进入到你的项目目录,这里使用demo文件夹为我的示例项目 4.在 ...