android 坐标点计算器,Android实现简易计算器

开之前我还是想问问老师,为什么一定要星期天前交作业呢?由于条件限制,作品是赶出来的不是细细琢磨出来的。所以在这版apk中功能较为简易,有待后期再不断更新与优化

总体效果图如下

eb56c9553456758b845480f6971eaa31.png

布局activity_main.xml部分代码

功能代码MainActivity.java

package com.example.cal;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.Button;

import android.widget.TextView;

import android.view.View;

import android.view.View.OnClickListener;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,

btnClear,btnPlus,btnSubtract,btnMultiply,btnDivide,btnSum,btnPoint;

TextView text;

String str = "";

boolean clr_flag;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn0 = (Button) findViewById(R.id.btn0);

btn1 = (Button) findViewById(R.id.btn1);

btn2 = (Button) findViewById(R.id.btn2);

btn3 = (Button) findViewById(R.id.btn3);

btn4 = (Button) findViewById(R.id.btn4);

btn5 = (Button) findViewById(R.id.btn5);

btn6 = (Button) findViewById(R.id.btn6);

btn7 = (Button) findViewById(R.id.btn7);

btn8 = (Button) findViewById(R.id.btn8);

btn9 = (Button) findViewById(R.id.btn9);

btnClear = (Button) findViewById(R.id.btnClear);

btnPlus = (Button) findViewById(R.id.btnPlus);

btnSubtract = (Button) findViewById(R.id.btnSubtract);

btnMultiply = (Button) findViewById(R.id.btnMultiply);

btnDivide = (Button) findViewById(R.id.btnDivide);

btnPoint = (Button) findViewById(R.id.btnPoint);

btnSum = (Button) findViewById(R.id.btnSum);

text = (TextView) findViewById(R.id.text) ;

btn0.setOnClickListener(this);

btn1.setOnClickListener(this);

btn2.setOnClickListener(this);

btn3.setOnClickListener(this);

btn4.setOnClickListener(this);

btn5.setOnClickListener(this);

btn6.setOnClickListener(this);

btn7.setOnClickListener(this);

btn8.setOnClickListener(this);

btn9.setOnClickListener(this);

btnClear.setOnClickListener(this);

btnPlus.setOnClickListener(this);

btnSubtract.setOnClickListener(this);

btnMultiply.setOnClickListener(this);

btnDivide.setOnClickListener(this);

btnPoint.setOnClickListener(this);

btnSum.setOnClickListener(new click());

}

public void onClick(View v) {

String input=text.getText().toString();

switch (v.getId()){

case R.id.btn0:

case R.id.btn1:

case R.id.btn2:

case R.id.btn3:

case R.id.btn4:

case R.id.btn5:

case R.id.btn6:

case R.id.btn7:

case R.id.btn8:

case R.id.btn9:

case R.id.btnPoint:

if(clr_flag){

clr_flag=false;

str="";

text.setText("");

}

text.setText(input+((Button)v).getText());

break;

case R.id.btnPlus:

case R.id.btnSubtract:

case R.id.btnMultiply:

case R.id.btnDivide:

if(clr_flag){

clr_flag=false;

input="";

text.setText("");

}

text.setText(input + " " + ((Button)v).getText() + " ");

break;

case R.id.btnClear:

text.setText("");

break;

}

}

class click implements OnClickListener{

public void onClick (View v) {

getResult();

}

}

private void getResult () {

String str1 = text.getText().toString();

if(str1 == null || str1.equals("")){

return;

}

if(!str1.contains(" ")){

return ;

}

if(clr_flag){

clr_flag=false;

return;

}

clr_flag=true;

double result = 0;

String s1 = str1.substring(0,str1.indexOf(" "));

String op = str1.substring(str1.indexOf(" ")+1,str1.indexOf(" ")+2);

String s2 = str1.substring(str1.indexOf(" ")+3);

if(!s1.equals("")&&!s2.equals("")) {

double d1 = Double.parseDouble(s1);

double d2 = Double.parseDouble(s2);

if (op.equals("+")) {

result = d1 + d2;

} else if (op.equals("-")) {

result = d1 - d2;

} else if (op.equals("*")) {

result = d1 * d2;

} else if (op.equals("/")) {

if (d2 == 0) {

result = 0;

}

else {

result = d1 / d2;

}

}

if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {

int r = (int) result;

text.setText(str1 + " = " + r + "");

} else{

text.setText(str1 + " = " + result + "");

}

}

//

else if(!s1.equals("")&&s2.equals("")){

double d1 = Double.parseDouble(s1);

if (op.equals("+")){

result = d1;

}

if (op.equals("-")) {

result = d1;

}

if (op.equals("*")) {

result = 0;

}

if (op.equals("/")) {

result = 0;

}

if(!s1.contains(".")) {

int res = (int) result;

text.setText(str1 + " = " + res+"");

}else {

text.setText(str1 + " = " + result+"");

}

}

else if(s1.equals("")&& !s2.equals("")){

double d2 = Double.parseDouble(s2);

if(op.equals("+")){

result = 0+d2;

}else if(op.equals("-")){

result = 0-d2;

}else if(op.equals("*")){

result = 0;

}else if(op.equals("/")){

result = 0;

}

if(!s1.contains(".") && !s2.contains(".")){

int res = (int) result;

text.setText(str1 + " = " + res + "");

}else{

text.setText(str1 + " = " + result + "");

}

}else{

text.setText("");

}

}

}

设计思路

1、页面设计,采用网格布局GridLayout。用android:columnCount,android:rowCount,来设置行数和列数。android:layout_columnSpan,和android:layout_rowSpan用来指定该单元格占据的列数和行数。颜色的话根据个人喜好设置,在此用的是十六进制rgb,更多颜色选取可参考RBG颜色对照表http://tool.oschina.net/commons?type=3   关于GridLayout可参考GridLayout 使用总结简书https://www.jianshu.com/p/2488847f9013

2、功能设计,总体思路是给每个键添加监听器,获取里面的值进行相应的加减乘除计算。计算过程和结果显示在一个testview上

测试案例

8f90cdd0c4afe2b7c20bb27c8d9610e0.png73fa3fbe356c6789cb5e4a01337cb320.pngb6084d602604dcc6a88aa9c258130825.png765c8102630c6934706f9ff215267d80.png

总结反思

1.本次实验主要是通过完成一个简易计算器来练习布局与算法。

2.该项目中java部分代码较简易可以改进的地方有

(1)添加backspace按键,免得一次输错就直接全部清空

(2)小数部分的计算仍然存在一些小问题。如1.1+2.2=3.300000000000003

(3)当计算数字过大,占用地方变大会把计算部分的按键往下推下去。(属于布局的问题)

本次反思到此结束,希望下次有更加充足的时间来优化代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1的恢复出厂设置在哪里_罗斯蒙特变送器怎么恢复出厂设置?

罗斯蒙特变送器怎么恢复出厂设置?特殊情况下,罗斯蒙特变送器需要恢复出厂设置。罗斯蒙特变送器进行出厂设置的方法非常简单,只需要用手操器或AMS设备管理器就能操作。罗斯蒙特手操器里有一个恢复出厂调整值–传感器量程调整命令,使用此命令就…

【技术累积】【点】【java】【25】Orderd

基础概念 Orderd是spring core中定义的一个接口,使用它以及相关的Comparator和Order注解,可以实现对元素的排序。 Order 直接先说下Order注解吧,使用场景较多。 Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.M…

Guzzle – 构建 RESTful Web 服务的 PHP HTTP 框架

Guzzle 减轻了发送 HTTP 请求和创建 Web 服务客户端的痛苦。它包含建立一个强大的网络服务客户端的工具,包括:服务描述定义的输入和输出的 API,资源迭代器遍历分页资源,尽可能有效地发送大量的请求。 您可能感兴趣的相关文章特别推…

小米手机升级Android6,小米3能升级miui 6?小米3升级miui v6教程

小米3升级miui v6教程来咯~小编还带来了miui v6下载,MIUI V6系统有了很多的变化,小米3是可以升级miui6系统的哦~如果你不知道步骤的话,就请参考下文吧。第一步、下载工具包和线刷完整包,下载完成后解压(请检查线刷包文件后缀名是否…

第一次java作业

转载于:https://www.cnblogs.com/TuTu-winer/p/10591021.html

推荐25款很棒的 HTML5 前端框架和开发工具【下篇】

快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5。HTML5 有许多新的特性功能,允许开发人员和设计师创建应用程序和网站,带给用户桌面应用程序的速度,性能和体验。 这里…

android18lazuli,The Rise And Fall Of Android 17

Hey guys, Tommy here. Today I’m bringing you another blog talking about Android 17. I’ve had mixed emotions on Android 17’s return in Dragon Ball Super since it originally happened. I feel like now with this whole Android 17‘a return is something I sho…

luogu P1462 通往奥格瑞玛的道路

嘟嘟嘟 这道题的题面相当的迷,我看了半天都没懂。最后看了题解的解释才懂。 他是这么个意思:对于所有能活着走到终点的路径,输出每一条路径中过路费最多的城市的最小值。 那么自然想到二分过路费,然后用dijkstra或spfa判断是否存在…

Maven私服(Nexus)搭建总结

因为工作需要,第一次搭建Maven私服,使用的是目前最流行的Sonatype Nexus。搭建私服并不难,官网有很详细的说明,只需几个步骤即可搭建一个可用的私服,但因为公司系统环境(测试)的原因还是遇到几个…

Effeckt.css – CSS3 Transitions Animations 精妙应用

CSS3 不仅仅用作界面效果补充,还可以用来替换传统的一些界面实现,而且效果更酷。Effeckt.css 收集了众多精妙的 CSS3 Transitions & Animations 效果应用,例如:弹窗、按钮、导航、列表、页面切换等等。 您可能感兴趣的相关文章…

html如何让字体自动变色,CSS使文字部分变色

思路思路很简单,就是一个字写两遍,一个字只显示部分,不过不能真的把一个字写两遍。这里就需要用到CSS伪元素:before和:after,记住这个“伪元素”的“伪”字,表明它本来是不存在的。我们的方法就是在伪元素里放置相同的…

Codrops 教程:基于 CSS3 的精美模态窗口效果

Codrops 分享了漂亮的模态窗口效果实现方法,希望给前端开发人员提供一些创新显示对话框的启示。这个方案使用了触发按钮(或任何的 HTML 元素),在点击的时候出现一个模态窗口,带有简单的过渡(或动画&#xf…

html5录像功能限制时间,HTML5拍照和摄像机功能实战详解

开篇最近在做一个chrome app的云相机应用,应用包括拍照、摄像、保存照片视频、上传文件等等核心功能,其中涉及到很多HTML5对媒体流相关的API。写这篇文章的目的,其一是总结梳理知识点,最重要是希望对有相关需求的读者提供一些指导…

选择Vert.x的3个理由

Vert.x是用于JVM的轻量级高性能应用程序平台 现代Web应用程序和移动客户端的兴起重新定义了Web服务器的期望。 Node.js是第一个识别范式转换并提供解决方案的技术。 应用程序平台Vert.x借鉴了Node.js的一些创新,并使其在JVM上可用,将新鲜的想法与最复杂…

FROONT – 超棒的可视化响应式网页设计工具

FROONT 是一个基于 Web 的设计工具,在浏览器中运行,使得各类可视化设计的人员都能进行响应式的网页设计,即使是那些没有任何编码技能的设计师。FROONT 使得响应式网页设计能够可视化操作,能够在浏览器中使用直观的拖放工具进行设计…

OO-第一单元总结

经过了前三次作业和两次实验的引导,我的编程思路在逐步从面向过程转向面向对象。也对面向对象有了初步的理解。虽然第一次实验由于自己没有及时完成导致没有提交过有些遗憾,但是第二次实验还是提交了几次的(虽然由于时间原因并没有做好本地测…

2013年五大主流浏览器 HTML5 和 CSS3 兼容性大比拼

转眼又已过去了一年,在这一年里,Firefox 和 Chrome 在拼升级,版本号不断飙升;IE10 随着 Windows 8 在去年10月底正式发布,在 JavaScript 性能和对 HTML5 和 CSS3 的支持方面让人眼前一亮。这篇文章给大家带来《五大主流…

PAT L3-007 天梯地图

https://pintia.cn/problem-sets/994805046380707840/problems/994805051153825792 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线…

Two.js – 为现代浏览器而生的 2D 绘图 API

Two.js 是面向现代 Web 浏览器的一个二维绘图 API。Two.js 可以用于多个场合:SVG,Canvas 和 WebGL,旨在使平面形状和动画的创建更方便,更简洁。 Two.js 有一个内置的动画循环,可搭配其他动画库。Two.js 包含可伸缩矢量…

apache arm 交叉编译_MacOS 下交叉编译的折腾笔记

这是这个系列 “折腾笔记” 的第一篇,希望能用更直白的方式去展现交叉编译的时候做了些什么。因此,这个教程并不是最佳实践,但是可以让小伙伴们有一个更直白的理解。之后,我会把笔记的重点放在 bazel 上交叉编译的最佳实践&#x…