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,一经查实,立即删除!

相关文章

使用反射进行测试

根据我以前的帖子,我正在撰写有关“单一责任原则”的演讲。 我花了大部分时间。 同时,我想分享一个示例代码,说明如何在类中测试内部字段。 我这样做是为了进行特殊的测试,这更多的是集成测试。 在依赖类的标准单元测试中&#x…

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

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

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

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

android 展示星期方式,Android显示从一周到另一周的日期(星期四至星期四)

最后我得到了工作一个解决方案,解决我的问题:在OnCreate中:TextView tv_chart_menuvotes (TextView) findViewById(R.id.tv_chart_menuvotes);String csPrevThur getPreviousThursday();String csNextThur getNextThursday();tv_chart_men…

Java 8 – Date API的新增功能

随着Java 8最终版本的发布,令我兴奋的新功能之一就是新的Date API,这是JSR 310的工作成果。 尽管Lambda表达式无疑是Java 8的一大亮点,但是拥有更好的日期处理方式无疑是受欢迎的。 这是一篇简短的文章(第2部分或第3部分的第1部分…

ps抠图怎么放大图片_PS抠图时选区图片放大后,怎么移动图片抠图选区?

我们在Photoshop中使用套索、钢笔等工具进行抠图选区的时候,经常需要将图片放大,保证抠图选区的精确性,但是同时因为图片放大后超出了显示区域,我们在移动抠图选区工具进行抠图选区的时候,总是出现各种错误&#xff0c…

perl 用网易发邮件报错 554 DT:SPM 163 smtp14

查看相关链接,貌似被当成垃圾邮件了,发不出去 554 DT:SPM 163 smtp14,EsCowACHUegmKpdc3giRMQ--.29617S2 1553410599,please see http://mail.163.com/help/help_spam_16.htm?ip183.30.222.245&hostidsmtp14&time1553410599 脚本改成CC给自己&a…

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

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

合成和桥接方法

如果您曾经玩过反射并执行了getDeclaredMethods()您可能会感到惊讶。 您可能会获得源代码中不存在的方法。 或者,也许您看了一些方法的修饰符,发现其中一些特殊方法是易变的。 顺便说一句:对于Java采访来说,这是一个令人讨厌的问题…

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

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

hibernate使用sessionfactory插入数据

1.引入hibernate-core.jar 2.java代码 public void meth{ Session session sessionFactory.openSession();Transaction tr session.beginTransaction();//1.创建Customer对象//2.调用Session的save()方法,将Customer对象持久化session.save(jbpmTaskInherit);tr.c…

lisp 揭 院长_HISLISPACSRIS EMR系统简介

HIS(LIS、PACS、RIS、EMR)系统简介一、定义说明医院信息系统(Hospital Information System, HIS),利用电子计算机和通讯设备,为医院所属各部门提供病人诊疗信息和行政管理信息的收集、存储、处理、提取和数据交换的能力,并满足所有授权用户的…

第一次java作业

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

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

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

创建Sonarqube项目

Sonarqube (nee Sonar)是炸弹。 不必每天检查一次,但是如果您对质量很认真,则可以在Sprint计划期间(如果不是每周一次)对其进行检查。 在nemo.sonarqube.com上查看示例项目,例如OpenJPA &#…

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判断是否存在…

树莓派 红灯不亮_请问我的树莓派烧了系统后板子只有红灯亮,而act绿灯不亮,并且网口不插网线两个灯都是微微亮,请问?...

错误已找出,是镜像文件的问题。如果你的情况跟我下面的情况一样,可以把镜像重新下载一遍。以下是原回答:我的也是,买的3b。第一次烧录系统是成功的,TF卡插入之后,上电,power红灯亮,A…

Maven私服(Nexus)搭建总结

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

Effeckt.css – CSS3 Transitions Animations 精妙应用

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