java制作计算器的时候同时输入两个运算符出错

问题描述

java制作计算器的时候同时输入两个运算符出错

按照慕课网一步一步做的,但是做完之后存在一个问题,就是如果已经输入了一个运算符号,继续输入一个运算符号,后输入的那一个并不会将原来的那个符号覆盖,所以就会运算出错。请问有什么方法解决?(我尝试通过if判断是否已经输入了运算符,如果已经输入,就把原来的截去之后再写入新的运算符,但是没有效果)

package com.example.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener{
    private Button bt0,bt1,bt2,bt3,bt4,bt5,bt6,bt7,bt8,bt9,btplus,btdiv,btdel,btclear,btmultiply,btminus,btpot,btequal;
    private EditText input;
    private boolean clear_flag;//清空标识
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt0=(Button) findViewById(R.id.btn_zero);
        bt1=(Button) findViewById(R.id.btn_one);
        bt2=(Button) findViewById(R.id.btn_two);
        bt3=(Button) findViewById(R.id.btn_three);
        bt4=(Button) findViewById(R.id.btn_four);
        bt5=(Button) findViewById(R.id.btn_five);
        bt6=(Button) findViewById(R.id.btn_six);
        bt7=(Button) findViewById(R.id.btn_seven);
        bt8=(Button) findViewById(R.id.btn_eight);
        bt9=(Button) findViewById(R.id.btn_nine);
        btplus=(Button) findViewById(R.id.btn_plus);
        btdiv=(Button) findViewById(R.id.btn_devide);
        btdel=(Button) findViewById(R.id.btn_del);
        btequal=(Button) findViewById(R.id.btn_equal);
        btclear=(Button) findViewById(R.id.btn_clear);
        btmultiply=(Button) findViewById(R.id.btn_multiply);
        btminus=(Button) findViewById(R.id.btn_minus);
        btpot=(Button) findViewById(R.id.btn_pot);
        input=(EditText) findViewById(R.id.et_input);

        bt0.setOnClickListener(this);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);
        bt5.setOnClickListener(this);
        bt6.setOnClickListener(this);
        bt7.setOnClickListener(this);
        bt8.setOnClickListener(this);
        bt9.setOnClickListener(this);
        btplus.setOnClickListener(this);
        btdiv.setOnClickListener(this);
        btdel.setOnClickListener(this);
        btequal.setOnClickListener(this);
        btclear.setOnClickListener(this);
        btmultiply.setOnClickListener(this);
        btminus.setOnClickListener(this);
        btpot.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        String str=input.getText().toString();
        switch(v.getId())
        {
        case R.id.btn_one:
        case R.id.btn_two:
        case R.id.btn_three:
        case R.id.btn_four:
        case R.id.btn_five:
        case R.id.btn_six:
        case R.id.btn_seven:
        case R.id.btn_eight:
        case R.id.btn_nine:
        case R.id.btn_pot:
        case R.id.btn_zero:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }
            input.setText(str+((Button)v).getText());
            break;
        case R.id.btn_devide:
        case R.id.btn_plus:
        case R.id.btn_minus:
        case R.id.btn_multiply:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }
            input.setText(str+" "+((Button)v).getText()+" ");
            break;
        case R.id.btn_del:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }else if(str!=null&&!str.equals("")){
                input.setText(str.substring(0,str.length()-1));
            }
            break;
        case R.id.btn_clear:
            clear_flag=false;
            str="";
            input.setText("");
            break;
        case R.id.btn_equal:
            getResult();
            break;
        default:
        }
    }
    //运算结果
    private void getResult(){
        String exp=input.getText().toString();
        if(exp==null||exp.equals("")){
            return;
        }
        if(!exp.contains(" ")){
            return;
        }
        if(clear_flag){
            clear_flag=false;
            return;
        }
        clear_flag=true;
        double result=0;
        String s1=exp.substring(0,exp.indexOf(" "));//运算符前面的字符串
        String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//截取到的运算符
        String s2=exp.substring(exp.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;
                input.setText(r+"");
            }else{
                input.setText(result+"");
            }
        }else if(!s1.equals("")&&s2.equals("")){
            input.setText(exp);
        }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(!s2.contains(".")){
                int r=(int) result;
                input.setText(r+"");
            }else{
                input.setText(result+"");
            }
        }else{
            input.setText("");
        }
    }
}

解决方案

运算符为一个字节,在java默认的string编码中,你可以用char存储,那么不管你按多少次,总是会覆盖前面的,并不会判断。

解决方案二:

看了下你的思路,比如你上面的输入的值 是 String s = " 5 + ";String reg = "+ ";
if(s.endsWith(reg)) s = s.replace(reg,"");这样一定能替换掉

时间: 2024-11-05 19:38:05

java制作计算器的时候同时输入两个运算符出错的相关文章

监听-java 制作提示输入 求助

问题描述 java 制作提示输入 求助 我在JTextArea里设置监听,输入文本后会弹出一个含有JList的JWindow,通过选择JList里的选项可以自动完成输入,类似Myeclipse的提示输入功能.但是Jlist选项只能用鼠标选择,用键盘↑↓不能选择,键盘↑↓只会改变JTextArea里键盘光标的位置,请问怎么解决? 解决方案 http://stackoverflow.com/questions/14402091/jlist-horizontal-auto-scroll-to-righ

WPS怎么输入两个红头标题的文件

  WPS怎么输入两个红头标题的文件         1.打开我们的WPS文字软件,点击"格式"选项卡,在弹出的下拉菜单中选择"中文版式"选项中的"双行合一"命令; 2.在双行合一的对话框中编辑我们需要制作红头文件的两个标题,且用空格键隔开,这里切记不可输入"文件"二字,然后单击"确定",例如这里我们输入"湖北大学.湖北大学知行学院"两个标题; 3.之后在我们的文档中就会出现输入的标题,

界面-java 简易计算器,最后得数不能出现,求大神帮忙

问题描述 java 简易计算器,最后得数不能出现,求大神帮忙 (1)编写一个简易计算器程序,其界面如下图所示: (2)当按下"+"按钮时,两个数值文本框之间应显示"+"号,同时相加结果显示在第三个文本框内(如下图所示).类似处理"-"."*"和"/"按钮. 现在第二步能够出现加号 就是不能正确运算.如下代码,注释的地方为什么不能运行,该怎么做才能做到当按下加的按钮b1时,同时出现加号和得数?这里的tf和tf

qt制作计算器,计算器的类型转化

问题描述 qt制作计算器,计算器的类型转化 标准型到科学型的转变应该如何进行,是需要两个ui么,如果是怎么进行切换的,或者有别的什么思路,求help 解决方案 最简单的是把高级功能放在界面的另一边,通过控制窗口的大小,让它们显示或者不显示实现切换,这样只要一个窗口. 解决方案二: 计算器的制作 解决方案三: http://blog.hehehehehe.cn/a/8642.htm

java简单计算器,计算结果总是出错

问题描述 java简单计算器,计算结果总是出错 package com.calculator; import java.awt.*; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.event.*; public class CALC extends JFrame { private JPanel jp; private JTextField tf; private JButton b7;

java制作简单的坦克大战_java

详情请参照注释,这里就不多废话了,实现一下儿时的经典而已. Blood.java package com.hkm.TankWar; import java.awt.*; /** * 血块类,我方坦克吃了可回血: * @author Hekangmin * */ public class Blood { private int x,y,w,h;//血块的位置和宽度高度: private TankWarClient tc; private int step=0;//纪录血块移动的步数: privat

Java 中 Form表单数据的两种提交方式_java

1 GET - 从指定的服务器中获取数据 1.1 GET方法 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,例如:http://localhost:8080//customer/customer_info?res=json&mt=0&custId=1 1.2 特点 (1) GET请求能够被缓存 (2) GET请求会保存在浏览器的浏览记录中 (3) 以GET请求的URL能够保存为浏览器书签 (4) GET请求有长度限制(不能多于1024字节) (5) GET请

Java简易计算器程序设计_java

编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp

Java编写计算器的常见方法实例总结_java

本文实例总结了Java编写计算器的常见方法.分享给大家供大家参考,具体如下: 方法一: package wanwa; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends JFrame { private Container container; private GridBagLayout layout; private GridBagConstraint