范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

每日一练之模拟计算器逻辑部分

  今天跟着bilibili的教程,参考了网上的一些资料,实现了计算器app的基本逻辑部分,实际上需要细化的还用很多,但只是个练习,就不抠细节部分了,只是熟悉掌握按键互动的一些基本命令。
  package com.example.myapplication_test;  import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;  import androidx.appcompat.app.AppCompatActivity;  import java.util.LinkedList; import java.util.Stack;  public class CalculatorActivity extends AppCompatActivity {      private Button btn_0;     private Button btn_1;     private Button btn_sqrt;     private Button btn_2;     private Button btn_3;     private Button btn_4;     private Button btn_5;     private Button btn_6;     private Button btn_7;     private Button btn_8;     private Button btn_9;     private Button btn_point;     private Button btn_plus;     private Button btn_minus;     private Button btn_multiply;     private Button btn_pide;     private Button btn_ce;     private Button btn_clear;     private Button btn_del;  // 清除一个数字     private Button btn_equal;     private TextView tv_num_calculate;//算数表达式     private TextView tv_result;//计算结果     private boolean is_new_calculate; //判断是否是新的计算开始     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_calculator);         //控制button上图标大小         btn_sqrt = findViewById(R.id.sqrt);         Drawable drawable1 = getResources().getDrawable(R.drawable.kaifang);         drawable1.setBounds(20, 20, 100, 100);//第一0是距左边距离,第二0是距上边距离,40分别是长宽         btn_sqrt.setCompoundDrawables(drawable1, null, null, null);//只放左边 //        计算结果         tv_result = findViewById(R.id.result_text);         tv_num_calculate = findViewById(R.id.num_calculate); //        每个按钮注册监听         btn_0 = findViewById(R.id.zero);         btn_1 = findViewById(R.id.one);         btn_2 = findViewById(R.id.two);         btn_3 = findViewById(R.id.three);         btn_4 = findViewById(R.id.four);         btn_5 = findViewById(R.id.five);         btn_6 = findViewById(R.id.six);         btn_7 = findViewById(R.id.seven);         btn_8 = findViewById(R.id.eight);         btn_9 = findViewById(R.id.nine);         btn_point = findViewById(R.id.point);         btn_plus = findViewById(R.id.plus);         btn_minus = findViewById(R.id.minus);         btn_multiply = findViewById(R.id.multiply);         btn_pide = findViewById(R.id.pide);         btn_del = findViewById(R.id.del);  // 倒数         btn_equal = findViewById(R.id.equal);  // 等于         btn_ce = findViewById(R.id.CE_btn);  // 回退         btn_clear = findViewById(R.id.clear);  // 清除          btn_0.setOnClickListener(ClickFn);         btn_1.setOnClickListener(ClickFn);         btn_2.setOnClickListener(ClickFn);         btn_3.setOnClickListener(ClickFn);         btn_4.setOnClickListener(ClickFn);         btn_5.setOnClickListener(ClickFn);         btn_6.setOnClickListener(ClickFn);         btn_7.setOnClickListener(ClickFn);         btn_8.setOnClickListener(ClickFn);         btn_9.setOnClickListener(ClickFn);         btn_point.setOnClickListener(ClickFn);         btn_plus.setOnClickListener(ClickFn);         btn_minus.setOnClickListener(ClickFn);         btn_multiply.setOnClickListener(ClickFn);         btn_pide.setOnClickListener(ClickFn);         btn_sqrt.setOnClickListener(ClickFn);         btn_del.setOnClickListener(ClickFn);         btn_equal.setOnClickListener(ClickFn);         btn_ce.setOnClickListener(ClickFn);         btn_clear.setOnClickListener(ClickFn);      }       private View.OnClickListener ClickFn = new View.OnClickListener() {         private static final String TAG = "CalculatorActivity";          @Override         public void onClick(View view) {             String input_text = tv_num_calculate.getText().toString();             if (is_new_calculate && view.getId()!=R.id.equal) {                 input_text = "";                 is_new_calculate = false;                 tv_result.setText("=0");                 tv_num_calculate.setText(input_text);             }               tv_result.setTextSize(30);             switch (view.getId()) {                 case R.id.zero:                 case R.id.one:                 case R.id.two:                 case R.id.three:                 case R.id.four:                 case R.id.five:                 case R.id.six:                 case R.id.seven:                 case R.id.eight:                 case R.id.nine:                     input_text = input_text + ((Button) view).getText().toString();                     tv_num_calculate.setText(input_text);                     break;                 case R.id.sqrt:                     input_text = input_text + " ";                     ;                 case R.id.point:                 case R.id.plus:                 case R.id.minus:                 case R.id.multiply:                 case R.id.pide: //                   不允许连续输入多个运算符                     if (input_text != null && !input_text.equals("")) { //                        char c = input_text.charAt(input_text.length() - 1); //                        if ((byte)c>41 && (byte)c<48 || c.equals("-")) {                         //acsii的42-47为* + , - . /                         String c = input_text.substring(input_text.length() - 1);                         if (c.equals(" ") || c.equals("-") || c.equals(" ") || c.equals(" ") || c.equals(".") || c.equals(" ")) { //                            判断如果两次按的都是运算符,取最后一个运算符                             tv_num_calculate.setText(input_text.substring(0, input_text.length() - 1) + ((Button) view).getText());                         } else {                             //判断如果第两次按不是运算符,直接按字符串累加                             tv_num_calculate.setText(input_text + ((Button) view).getText());                         }                     }                     break;                 case R.id.del:                     if (input_text != null && !input_text.equals("")) {                         input_text = input_text.substring(0, input_text.length() - 1);                         tv_num_calculate.setText(input_text);                     }                     break;                 case R.id.CE_btn:                     //第一次ac清空calculate,第二次清空result                     if(input_text.equals("")){                         //calculate为空则清空计算结果                         tv_result.setText("0");                     }                     input_text = "";                     tv_num_calculate.setText(input_text);                     break;                 case R.id.clear:                     input_text = "";                     tv_result.setText("0");                     tv_num_calculate.setText(input_text);                 case R.id.equal: //                   按 = 时进行,tv_num_calculate为结果值                     tv_result.setTextSize(40);                      if (input_text == null || input_text.equals("")) {                         tv_result.setText("0");                     } else {                         tv_result.setText("=" + input_text);                         // 每输入一次数字后就进行计算                         tv_result.setText("=" + getResult(input_text));                         is_new_calculate = true;                     }                      break;                 default:                     break;             }              Log.d(TAG, "onClick: " + input_text);         }          private String getResult(String input_text) {              if (input_text == null || input_text.equals("")) {                 return "";             }             // 如果不为空,先判断末尾是否是符号,如果是符号,就去掉             String c = input_text.substring(input_text.length() - 1);             if (c.equals(" ") || c.equals("-") || c.equals(" ") || c.equals(" ") || c.equals(".") || c.equals(" ")) {                 input_text = input_text.substring(0, input_text.length() - 1);             }             double return_num = 0;             return_num = calculator(input_text);             //    如果小数位为0输出整形int             String return_string;             if (return_num % 1 == 0) {                 return_string = String.valueOf((int) return_num);             } else {                 return_string = String.valueOf(return_num);             }             return return_string;         }          //        运算,将数字类型改为double并在其中加入小数的运算         private double calculator(String input_text) { //            一、 把表达式分解成运算符和数字             Stack stkEles = new Stack();             LinkedList tempBackcal = new LinkedList();             for (int i = 0; i < input_text.length(); i++) {                 // 1.遇到了数字                 if (Character.isDigit(input_text.charAt(i))) {                     // 注意多位数的获取                     int k = i + 1;                     //小数点也加入数字中                     for (; k < input_text.length() && (Character.isDigit(input_text.charAt(k)) || input_text.charAt(k) == "."); k++) {                      }                     tempBackcal.add(input_text.substring(i, k));                     i = k - 1;// 更新 i                     continue;                 }                 // 2.遇到了乘除运算符 //                if (input_text.charAt(i) == "/" || input_text.charAt(i) == "*") {                 if (input_text.charAt(i) == " " || input_text.charAt(i) == " ") {                      while (!stkEles.isEmpty() && (stkEles.lastElement().equals(" ") || stkEles.lastElement().equals(" "))) {                         tempBackcal.add(stkEles.pop()); // 弹出优先级相同或以上的栈内运算符                     }                     stkEles.add(String.valueOf(input_text.charAt(i))); // 运算符入栈                     continue;                 }                 // 3.遇到了加减运算符                 if (input_text.charAt(i) == " " || input_text.charAt(i) == "-") {                     while (!stkEles.isEmpty() && !isNumeric(stkEles.lastElement())) {                         tempBackcal.add(stkEles.pop()); // 弹出优先级相同或以上的栈内运算符                     }                     stkEles.add(String.valueOf(input_text.charAt(i))); // 运算符入栈                     continue;                 }             }             // 4.最后弹出栈内所有元素到表达式             while (stkEles.size() > 0) {                 tempBackcal.add(stkEles.pop());             }             // 二、 把分解的运算符和数字进行计算             Stack calStk = new Stack();             for (String c : tempBackcal) {                 // 1.数字,入栈                 if (isNumeric(c)) {                     calStk.push(Double.valueOf(c)); // string to int                     continue;                 }                 // 2.非数字,则为符号,出栈两个元素计算出结果然后再入栈该计算值                 else {                     Double a = calStk.pop();                     Double b = calStk.pop();                     switch (c.toCharArray()[0]) {                         // 注意减法和除法时,注意出栈的顺序与原表达式是相反的                         case " ":                             calStk.push(b + a);                             continue;                         case "-":                             calStk.push(b - a);                             continue;                         case " ":                             calStk.push(b * a);                             continue;                         case " ":                             calStk.push(b / a);                             continue;                     }                 }             }             return calStk.pop();         }          private boolean isNumeric(String str) {             for (int i = 0; i < str.length(); i++) {                 //是否为数字或者小数点                 if (!Character.isDigit(str.charAt(i)) && str.charAt(i) != ".") {                     return false;                 }             }             return true;         }          ;     }; }

太空中的尸体会腐烂吗?会经历一个怎么样的过程?综述我们都知道,太空是一个真空环境,是没有氧气存在的,如果以地球上的物质变化规律为参照的话,一切只能在有氧环境中发生的事件都不会在太空环境中发生,比如尸体的腐烂。自从人类开始探索宇揭秘苹果经典表盘的前世今生,它们到底是如何打动人心的?随着AppleWatchSeries7上架,watchOS8为这款全新的机型设计了轮廓和双模块两款新表盘外,还悄悄加入了世界时间的新表盘,同时兼容前几代机型。早在6月份的WWDC2巡天探月问终极图片来源NASA官网俄罗斯Russia影史首创太空拍片太空旅游业务重启驻俄罗斯记者董映璧2021年7月,质子M号运载火箭从哈萨克斯坦拜科努尔发射场点火升空,将携带的俄罗斯多功能科学小小洗衣机帮大忙MINICOLO迷你洗为三胎助力大家二胎,三胎都安排上了吗?我这正准备要二胎,回想起当初因为孩子衣服可以不可以和大人衣服混洗,内衣能不能和其他衣物混洗在家里听领导叨叨叨那可是相当的难受了,这不,为了提升生活幸福感曲面屏65W闪充索尼IMX766大底,从3999元跌至2429元目前安卓UI比较热门的有小米MIUIvivoOriginOS和OPPOColorOS等,华为已经改用鸿蒙系统了,并非安卓UI,当然魅族的Flyme也曾经被认为是非常经典的安卓UI,小米虽不自研系统,但MIUI,也在朝着鸿蒙的方向发展在去年6月份,华为的Harmony2。0系列发布之后,很多人就一直在问华为之外的友商,那就是大家用不用鸿蒙系统?当时荣耀做了表态,称现在安卓是首选,未来可能会考虑鸿蒙,其实就是婉拒如何辨别真性价比和假性价比手机?其实不难,看3点就行市面上有很多主打性价比的手机,有些性价比的确很高,比如目前仍然在售的RedmiK40ProRedmiNote10ProOPPOK9s等等都是真性价比手机,但是有一些手机看似主打性价科比鹰郡性侵事件真相,科比强奸酒店服务生(赔偿500万美元)随着科比坠机事件的发生,代篮球之王永远离开了我们,人们在缅怀科比之时,也难免会想起曾经的科比鹰郡性侵事件,在科罗拉多州鹰郡的一家温泉旅馆中,科比强奸了前台服务生凯特琳。菲贝尔,法院iOS15背景声音新功能!无须安装App就能聆听6种舒适的白噪音如何不用通过安装App或线上环境音效网,来聆听舒适又能提升专注的白噪音呢?就让我们透过iOS15的背景声音新功能来聆听吧!当你将iPhone系统升到iOS15后,便可以透过背景声音2022年,我们将见证以下7项太空大事件人类对太空的探索从未如此深入。2022年有望成为迄今为止最令天文领域从业者们振奋的一年。未来10个月内,我们将见证以下7项太空大事件。NASA首发太空发射系统SLS2022年最令人研究人员发现以海洋废弃物为生的沿海海洋生物研究人员最近报告说,世界海洋中的塑料废物正在以新的不同寻常的方式影响海洋生物。一组美国和加拿大科学家发现,一些物种生活在太平洋漂浮的大片塑料垃圾上。研究小组发现了与沿海藤壶和海葵共
再提醒一次小个子上衣穿短不穿长,今年流行这4款,实用又高级衣品决定外在形象,不管你是因为身材微胖还是个头矮,都可以借助衣品化解这些问题。特别是小个子女生,会因为个矮产生身高焦虑,总觉得自己穿衣不好看。其实对于小个子女生来说,只要你的服饰搭生活小确幸栀子花开时清香醉游人四季生态园内栀子花已开。栀子花最大的特点在于花香,无论是种植于公园中还是摆放在室内,其悠悠清香会弥漫每个角落。在美化室外室内空间的同时,又充满诗意与美感。栀子为灌木,嫩枝常被短毛,官媒不再沉默,说出日韩的阴谋,吴京的言论被推上风口,怎么了?之前有关日本和韩国的流行风潮一直在我国十分盛行,不少的年轻少男少女也都多少受到当时流行文化的影响。并且在前几年当中我国也大量引进日本韩国等地的电视剧,这也对我国人民的思想造成了一定夏季的泥河村真的美翻了,想打卡的朋友,建议看一下翻开我的生活日记最近经常看到有人介绍天津市蓟州区的泥河村,暑期来临,作为一个去过泥河村的人,一点建议给大家,仅供参考。泥河村是天津市蓟州区罗庄子镇的一个小山村,因村子周边有山有水,人到中年才能明白,亲戚之间都很现实我们都以为,亲情是值得去珍惜的,是高尚的。人到中年后,才能深切感受到,亲戚之间的现实,亲情之间变质的味道。人在中年,上有年老的父母,下有年幼的孩子,都希望身边能够有很多依靠,可以在不想留他?篮网下狠心交易欧文,2份交易方案出炉,完了?欧文与篮网的续约商谈,据NBA名记Shams报道,双方已经陷入僵局,前者很有可能进入交易市场,湖人尼克斯和快船会成为潜在的下家。本月29日前,还剩下1年合同(价值3660万美元)的华晨宇太狠心!张碧晨好友曝光产子照,双眼闭目养神鼻腔插氧气管张碧晨和华晨宇这对曾经的恋人,再次引起众人的关注和热议近日,随着张碧晨好友在社交媒体晒出女方生产照,这个时候大家才知道,原来张碧晨女儿是早产孩子,并且也用实际行动否认了,张碧晨之前难怪会暴瘦,明星们的魔鬼身材背后,是一般人下不去的狠心娱乐圈的明星,最常被夸赞的点无非就是两个颜值身材。有的明星,人到中年皮肤依然吹弹可破,保养得如少女一般,实在令人羡慕。但毕竟人家每年花在脸上的钱都有几十万甚至上百万,众人只能感叹有乘风破浪的姐姐3二公山海为何会超过梦中人?不服昨晚又追浪姐3到最新一期,这次淘汰的是宁静组的赵樱子。因为那英组分数高,全员安全。所以宁静组的个人喜爱度最低的一个姐姐自然就面临了淘汰,说实话是意料之中的。为啥这么说咧,跟大家简单孩子在幼儿园挨欺负,奶奶带读三十六计3个策略让娃不做软柿子前几天J妈看到一个消息,外国人现在掀起了研读三十六计的热潮,很多老外用三十六计开始教育孩子。图中这位心理学家认为三十六计是关于处理矛盾的计谋计策,而人生就是由无数个矛盾组成的,从小你总说要去西域旅游你总是说尘世很苦很累,粉红的腮上挂满委屈的泪水。你总是重复说着一句话,和我牵手去西域旅游。远离城市尘嚣。可我一次次让你伤心失望。你总说真的不要大富大贵,得到我今生很幸福快乐。我总是