怎么实现java计算器的退格功能和清除当前操作功能 5C

(在网上找的代码来学的所以搞不懂逻辑)代码如下:

public class A3{

// 操作数1,为了程序的安全,初值一定设置,这里我们设置为0。
String str1 = "0"; 

// 操作数2
String str2 = "0";

// 运算符
String signal = "+"; 

// 运算结果
String result = "0";

// 以下k1至k2为状态开关

// 开关1用于选择输入方向,将要写入str1或str2
int k1 = 1;
// 开关2用于记录符号键的次数,如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算
int k2 = 1;
// 开关3用于标识 str1 是否可以被清0 ,等于1时可以,不等于1时不能被清0
int k3 = 1;
// 开关4用于标识 str2 是否可以被清0,等于1时可以,不等于1时不能被清0
int k4 = 1;
// 开关5用于控制小数点可否被录入,等于1时可以,不为1时,输入的小数点被丢掉
int k5 = 1;
// store的作用类似于寄存器,用于记录是否连续按下符号键
JButton store; 

@SuppressWarnings("rawtypes")

Vector vt = new Vector(20, 10);

// 声明各个UI组件对象并初始化
JFrame frame = new JFrame("计算器");
JTextField result_TextField = new JTextField(result, 10);
JButton clear_Button = new JButton("CE");
JButton clear_C = new JButton("C");
JButton button_tuige = new JButton("<-");
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button_Dian = new JButton(".");
JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_dy = new JButton("=");

// 计算机类的构造器
public A3() {
    //设置文本框背景颜色为浅灰色
    result_TextField.setBackground(Color.LIGHT_GRAY);
    //设置文本框字体样式和大小
     result_TextField.setFont(new Font("宋体",Font.BOLD,50));
    //设置文本框为不可编辑状态
    result_TextField.setEditable(false); 
    // 设置文本框为右对齐,使输入和结果都靠右显示
    result_TextField.setHorizontalAlignment(JTextField.RIGHT);

    // 将UI组件添加进容器内
    JPanel pan = new JPanel();
    pan.setLayout(new GridLayout(4, 4, 5, 5));
    pan.add(button7);
    pan.add(button8);
    pan.add(button9);
    pan.add(button_chu);
    pan.add(button4);
    pan.add(button5);
    pan.add(button6);
    pan.add(button_cheng);
    pan.add(button1);
    pan.add(button2);
    pan.add(button3);
    pan.add(button_jian);
    pan.add(button0);
    pan.add(button_Dian);
    pan.add(button_dy);
    pan.add(button_jia);
    pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    JPanel pan2 = new JPanel();
    pan2.setLayout(new GridLayout(1,4,5,5));
    pan2.add(result_TextField);


    JPanel pan3 = new JPanel();
    pan3.setLayout(new GridLayout(1,3,5,5));
    pan3.add(button_tuige);
    pan3.add(clear_C);
    pan3.add(clear_Button);


    // 设置主窗口出现在屏幕上的位置
    frame.setLocation(300, 200);
    // 设置窗体不能调大小
    frame.setResizable(false); 
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(pan2, BorderLayout.NORTH);
    frame.getContentPane().add(pan3, BorderLayout.CENTER);
    frame.getContentPane().add(pan, BorderLayout.SOUTH);

    frame.pack();
    frame.setVisible(true);

    // 事件处理程序

    // 数字键
    class Listener implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {
            String ss = ((JButton) e.getSource()).getText();//获取按钮文本属性
            store = (JButton) e.getSource();
            vt.add(store);
            if (k1 == 1) {
                if (k3 == 1) {
                    str1 = "";

                    // 还原开关k5状态
                    k5 = 1;
                }
                str1 = str1 + ss;

                k3 = k3 + 1;

                // 显示结果
                result_TextField.setText(str1);

            } else if (k1 == 2) {
                if (k4 == 1) {
                    str2 = "";

                    // 还原开关k5状态
                    k5 = 1; 
                }
                str2 = str2 + ss;
                k4 = k4 + 1;
                result_TextField.setText(str2);
            }

        }
    }

    // 输入的运算符号的处理
    class Listener_signal implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {
            String ss2 = ((JButton) e.getSource()).getText();
            store = (JButton) e.getSource();
            vt.add(store);

            if (k2 == 1) {
                // 开关 k1 为 1 时向数 1 写输入值,为2时向数2写输入值。
                k1 = 2;
                k5 = 1;
                signal = ss2;
                k2 = k2 + 1;// 按符号键的次数
            } else {
                int a = vt.size();
                JButton c = (JButton) vt.get(a - 2);

                if (!(c.getText().equals("+"))
                        && !(c.getText().equals("-"))
                        && !(c.getText().equals("*"))
                        && !(c.getText().equals("/")))

                {
                    cal();
                    str1 = result;
                    // 开关 k1 为 1 时,向数 1 写值,为2时向数2写
                    k1 = 2;
                    k5 = 1;
                    k4 = 1;
                    signal = ss2;
                }
                k2 = k2 + 1;
            }

        }
    }

    // 清除键的逻辑(CE)
    class Listener_clear implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {
            store = (JButton) e.getSource();
            vt.add(store);
            k5 = 1;
            k2 = 1;
            k1 = 1;
            k3 = 1;
            k4 = 1;
            str1 = "0";
            str2 = "0";
            signal = "";
            result = "";
            result_TextField.setText(result);
            vt.clear();
        }
    }

    // 归零键的逻辑(C)就是清除前一次按钮的操作
    class clear_C implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {

        }
    }

 // 退格键的逻辑(<-)
    class button_tuige implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {
        vt.add(store);

    }
}

    // 等于键的逻辑
    class Listener_dy implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {

            store = (JButton) e.getSource();
            vt.add(store);
            cal();

            // 还原各个开关的状态
            k1 = 1; 
            k2 = 1;
            k3 = 1;
            k4 = 1;

            str1 = result; 
        }
    }

    // 小数点的处理
    class Listener_xiaos implements ActionListener {
        @SuppressWarnings("unchecked")
        public void actionPerformed(ActionEvent e) {
            store = (JButton) e.getSource();
            vt.add(store);
            if (k5 == 1) {
                String ss2 = ((JButton) e.getSource()).getText();
                if (k1 == 1) {
                    if (k3 == 1) {
                        str1 = "";
                        // 还原开关k5状态
                        k5 = 1; 
                    }
                    str1 = str1 + ss2;

                    k3 = k3 + 1;

                    // 显示结果
                    result_TextField.setText(str1);

                } else if (k1 == 2) {
                    if (k4 == 1) {
                        str2 = "";
                        // 还原开关k5的状态
                        k5 = 1;
                    }
                    str2 = str2 + ss2;

                    k4 = k4 + 1;

                    result_TextField.setText(str2);
                }
            }

            k5 = k5 + 1;
        }
    }

    // 注册各个监听器,即绑定事件响应逻辑到各个UI组件上
    Listener_dy jt_dy = new Listener_dy();

    // 监听退格键
    Listener tg = new Listener();
    // 监听归零键
    Listener gl = new Listener();        
    // 监听数字键
    Listener jt = new Listener();
    // 监听符号键
    Listener_signal jt_signal = new Listener_signal();
    // 监听清除键
    Listener_clear jt_c = new Listener_clear(); 
    // 监听小数点键
    Listener_xiaos jt_xs = new Listener_xiaos();

    button_tuige.addActionListener(tg);
    clear_C.addActionListener(gl);
    button7.addActionListener(jt);
    button8.addActionListener(jt);
    button9.addActionListener(jt);
    button_chu.addActionListener(jt_signal);
    button4.addActionListener(jt);
    button5.addActionListener(jt);
    button6.addActionListener(jt);
    button_cheng.addActionListener(jt_signal);
    button1.addActionListener(jt);
    button2.addActionListener(jt);
    button3.addActionListener(jt);
    button_jian.addActionListener(jt_signal);
    button0.addActionListener(jt);
    button_Dian.addActionListener(jt_xs);
    button_dy.addActionListener(jt_dy);
    button_jia.addActionListener(jt_signal);
    clear_Button.addActionListener(jt_c);

    // 窗体关闭事件的响应程序
    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

}

1个回答

java写窗体程序很麻烦的,C#,C++更方便,如果你只是想做一个计算器的话,写一个HTML页面,用JS实现计算就足够了

qq_40358747
qq_40358747 很棒的回答
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求一个Java计算器的程序,具体要求如下:急急急急急…………………………
1.简单的运算:(以加法为例:123+456)  分析:计算的结果为579.0,为双精度型,计算的结果被设置在文本框的最右端,该计算器的一个特点是可直接在文本框中输入数据以及进行更改。  2.倒数的运算:(以123为例)  分析:输出的结果如图所示,倒数功能实现,计算时,不仅是结果,输入的数据同样可以先实现倒数功能后再进行相应的计算,没有影响!    3.退格的运算:(以123为例)  分析:输出的结果如图所示,本计算器退格键有一个特点是,就算是是计算后得出的结果也能实现退格,缺点是不能很好的处理小数点的问题,因为小数点也是字符串的一部分。 4.正负号的运算:(以123为例)  分析:输出的结果如图所示,正负号添加能够很好的实现,但可以进行一些改进,比如在计算过程当中直接点击负号运算符输入负数进行计算!   最好是带上运行结果的截图还有注释
java简易计算器实现,添加能够切换简易计算器和科学计算器的按键。
![图片说明](https://img-ask.csdn.net/upload/201810/27/1540655964_202901.png) 现已有完整计算器框架和实现,但是需求有一条是: 能 通过菜单可以切换简易计算器和科学计算器。 如今就这个功能未实现,简易计算器就是只包含+、-、*、/的状态,而科学计算器则包括开方、平方、幂运算、1/n等操作。各运算已实现,但就是不知道怎么切换界面。求大神添加一个能够让其变化界面的按钮函数来实现。 附上代码: ``` import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; /** * 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。 */ public class Calculator extends JFrame implements ActionListener { /** 计算器上的键的显示名字 */ private final String[] KEYS = { "7", "8", "9", "÷", "sqrt", "4", "5", "6", "x", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" }; /** 计算器上的功能键的显示名字 */ private final String[] COMMAND = { "Backspace", "CE", "C" }; /** 计算器左边的M的显示名字 */ private final String[] M = { " ", "MC", "MR", "MS", "M+" }; /** 计算器上键的按钮 */ private JButton keys[] = new JButton[KEYS.length]; /** 计算器上的功能键的按钮 */ private JButton commands[] = new JButton[COMMAND.length]; /** 计算器左边的M的按钮 */ private JButton m[] = new JButton[M.length]; /** 计算结果文本框 */ private JTextField resultText = new JTextField("0"); // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private boolean firstDigit = true; // 计算的中间结果。 private double resultNum = 0.0; // 当前运算的运算符 private String operator = "="; // 操作是否合法 private boolean operateValidFlag = true; /** * 构造函数 */ public Calculator() { super(); // 初始化计算器 init(); // 设置计算器的背景颜色 this.setBackground(Color.BLACK); this.setTitle("计算器"); // 在屏幕(500, 300)坐标处显示计算器 this.setLocation(500, 300); // 不许修改计算器的大小 this.setResizable(false); // 使计算器中各组件大小合适 this.pack(); } /** * 初始化计算器 */ private void init() { // 文本框中的内容采用右对齐方式 resultText.setHorizontalAlignment(JTextField.RIGHT); // 不允许修改结果文本框 resultText.setEditable(false); // 设置文本框背景颜色为白色 resultText.setBackground(Color.WHITE); // 初始化计算器上键的按钮,将键放在一个画板内 JPanel calckeysPanel = new JPanel(); // 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3)); for (int i = 0; i < KEYS.length; i++) { keys[i] = new JButton(KEYS[i]); calckeysPanel.add(keys[i]); keys[i].setForeground(Color.blue); } // 运算符键用红色标示,其他键用蓝色表示 keys[3].setForeground(Color.red); keys[8].setForeground(Color.red); keys[13].setForeground(Color.red); keys[18].setForeground(Color.red); keys[19].setForeground(Color.red); // 初始化功能键,都用红色标示。将功能键放在一个画板内 JPanel commandsPanel = new JPanel(); // 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 commandsPanel.setLayout(new GridLayout(1, 3, 3, 3)); for (int i = 0; i < COMMAND.length; i++) { commands[i] = new JButton(COMMAND[i]); commandsPanel.add(commands[i]); commands[i].setForeground(Color.red); } // 初始化M键,用红色标示,将M键放在一个画板内 JPanel calmsPanel = new JPanel(); // 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calmsPanel.setLayout(new GridLayout(5, 1, 3, 3)); for (int i = 0; i < M.length; i++) { m[i] = new JButton(M[i]); calmsPanel.add(m[i]); m[i].setForeground(Color.red); } // 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部, // 将文本框放在北部,将calms画板放在计算器的西部。 // 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内 JPanel panel1 = new JPanel(); // 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(new BorderLayout(3, 3)); panel1.add("North", commandsPanel); panel1.add("Center", calckeysPanel); // 建立一个画板放文本框 JPanel top = new JPanel(); top.setLayout(new BorderLayout()); top.add("Center", resultText); // 整体布局 getContentPane().setLayout(new BorderLayout(3, 5)); getContentPane().add("North", top); getContentPane().add("Center", panel1); getContentPane().add("West", calmsPanel); // 为各按钮添加事件侦听器 // 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener for (int i = 0; i < KEYS.length; i++) { keys[i].addActionListener(this); } for (int i = 0; i < COMMAND.length; i++) { commands[i].addActionListener(this); } for (int i = 0; i < M.length; i++) { m[i].addActionListener(this); } } /** * 处理事件 */ public void actionPerformed(ActionEvent e) { // 获取事件源的标签 String label = e.getActionCommand(); if (label.equals(COMMAND[0])) { // 用户按了"Backspace"键 handleBackspace(); } else if (label.equals(COMMAND[1])) { // 用户按了"CE"键 resultText.setText("0"); } else if (label.equals(COMMAND[2])) { // 用户按了"C"键 handleC(); } else if ("0123456789.".indexOf(label) >= 0) { // 用户按了数字键或者小数点键 handleNumber(label); // handlezero(zero); } else { // 用户按了运算符键 handleOperator(label); } } /** * 处理Backspace键被按下的事件 */ private void handleBackspace() { String text = resultText.getText(); int i = text.length(); if (i > 0) { // 退格,将文本最后一个字符去掉 text = text.substring(0, i - 1); if (text.length() == 0) { // 如果文本没有了内容,则初始化计算器的各种值 resultText.setText("0"); firstDigit = true; operator = "="; } else { // 显示新的文本 resultText.setText(text); } } } private void handleNumber(String key) { if (firstDigit) { // 输入的第一个数字 resultText.setText(key); } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面 resultText.setText(resultText.getText() + "."); } else if (!key.equals(".")) { // 如果输入的不是小数点,则将数字附在结果文本框的后面 resultText.setText(resultText.getText() + key); } // 以后输入的肯定不是第一个数字了 firstDigit = false; } private void handleC() { // 初始化计算器的各种值 resultText.setText("0"); firstDigit = true; operator = "="; } private void handleOperator(String key) { if (operator.equals("÷")) { // 除法运算 // 如果当前结果文本框中的值等于0 if (getNumberFromText() == 0.0) { // 操作不合法 operateValidFlag = false; resultText.setText("除数不能为零"); } else { resultNum /= getNumberFromText(); } } else if (operator.equals("1/x")) { // 倒数运算 if (resultNum == 0.0) { // 操作不合法 operateValidFlag = false; resultText.setText("零没有倒数"); } else { resultNum = 1 / resultNum; } } else if (operator.equals("+")) { // 加法运算 resultNum += getNumberFromText(); } else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } else if (operator.equals("x")) { // 乘法运算 resultNum *= getNumberFromText(); } else if (operator.equals("sqrt")) { // 平方根运算 resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { // 百分号运算,除以100 resultNum = resultNum / 100; } else if (operator.equals("+/-")) { // 正数负数运算 resultNum = resultNum * (-1); } else if (operator.equals("=")) { // 赋值运算 resultNum = getNumberFromText(); } if (operateValidFlag) { // 双精度浮点数的运算 long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { resultText.setText(String.valueOf(t1)); } else { resultText.setText(String.valueOf(resultNum)); } } // 运算符等于用户按的按钮 operator = key; firstDigit = true; operateValidFlag = true; } /** * 从结果文本框中获取数字 * * @return */ private double getNumberFromText() { double result = 0; try { result = Double.valueOf(resultText.getText()).doubleValue(); } catch (NumberFormatException e) { } return result; } public static void main(String args[]) { Calculator calculator1 = new Calculator(); calculator1.setVisible(true); calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ```
Android下的计算器的退格功能实现不了,还没有解决,请教各位大神,谢谢啦!
package com.example.t; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @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); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } private EditText output = null; private EditText input = null; private Button btn0 = null; private Button btn1 = null; private Button btn2 = null; private Button btn3 = null; private Button btn4 = null; private Button btn5 = null; private Button btn6 = null; private Button btn7 = null; private Button btn8 = null; private Button btn9 = null; private Button btnadd = null; private Button btnsubtract = null; private Button btnmultiply = null; private Button btndivide = null; private Button btnclear = null; private Button btnresult = null; private Button btndot = null; private Button btnbackspace = null; private Button btnkaifang = null; private Button btnpingfang = null; private String str = "";// 保存数字 private String strold = "";// 原数字 private char act = ' ';// 记录“加减乘除等于”符号 private int count = 0;// 判断要计算的次数,如果超过一个符号,先算出来一部分 private Double result = 0.0;// 计算的输出结果 private Boolean errBoolean = false;// 有错误的时候为true,无错为false private Boolean flagBoolean = false;// 一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息 private Boolean flagDot = false; // 小数点标志位 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); output = (EditText) rootView.findViewById(R.id.output); input = (EditText) rootView.findViewById(R.id.input); btn0 = (Button) rootView.findViewById(R.id.zero); btn1 = (Button) rootView.findViewById(R.id.one); btn2 = (Button) rootView.findViewById(R.id.two); btn3 = (Button) rootView.findViewById(R.id.three); btn4 = (Button) rootView.findViewById(R.id.four); btn5 = (Button) rootView.findViewById(R.id.five); btn6 = (Button) rootView.findViewById(R.id.six); btn7 = (Button) rootView.findViewById(R.id.seven); btn8 = (Button) rootView.findViewById(R.id.eight); btn9 = (Button) rootView.findViewById(R.id.nine); btnadd = (Button) rootView.findViewById(R.id.add); btnsubtract = (Button) rootView.findViewById(R.id.subtract); btnmultiply = (Button) rootView.findViewById(R.id.multiply); btndivide = (Button) rootView.findViewById(R.id.divide); btnclear = (Button) rootView.findViewById(R.id.clear); btnresult = (Button) rootView.findViewById(R.id.result); btndot = (Button) rootView.findViewById(R.id.dot); btnbackspace = (Button) rootView.findViewById(R.id.zhengfu); btnkaifang = (Button) rootView.findViewById(R.id.kaifang); btnpingfang = (Button) rootView.findViewById(R.id.pingfang); // 设置按钮侦听事件 btn0.setOnClickListener(new BtnOnClickListener()); btn1.setOnClickListener(new BtnOnClickListener()); btn2.setOnClickListener(new BtnOnClickListener()); btn3.setOnClickListener(new BtnOnClickListener()); btn4.setOnClickListener(new BtnOnClickListener()); btn5.setOnClickListener(new BtnOnClickListener()); btn6.setOnClickListener(new BtnOnClickListener()); btn7.setOnClickListener(new BtnOnClickListener()); btn8.setOnClickListener(new BtnOnClickListener()); btn9.setOnClickListener(new BtnOnClickListener()); // 执行运算 btnadd.setOnClickListener(new BtnOnClickListener()); btnsubtract.setOnClickListener(new BtnOnClickListener()); btnmultiply.setOnClickListener(new BtnOnClickListener()); btndivide.setOnClickListener(new BtnOnClickListener()); btnclear.setOnClickListener(new BtnOnClickListener()); btnresult.setOnClickListener(new BtnOnClickListener()); btndot.setOnClickListener(new BtnOnClickListener()); btnbackspace.setOnClickListener(new BtnOnClickListener()); btnkaifang.setOnClickListener(new BtnOnClickListener()); btnpingfang.setOnClickListener(new BtnOnClickListener()); return rootView; } class BtnOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { // 输入数字 case R.id.zero: num(0); break; case R.id.one: num(1); break; case R.id.two: num(2); break; case R.id.three: num(3); break; case R.id.four: num(4); break; case R.id.five: num(5); break; case R.id.six: num(6); break; case R.id.seven: num(7); break; case R.id.eight: num(8); break; case R.id.nine: num(9); break; case R.id.dot: dot(); break; // 执行运算 // 退格功能 case R.id.zhengfu: backspace(); break; case R.id.kaifang: kaifang(); break; case R.id.pingfang: pingfang(); break; case R.id.add: add(); break; case R.id.subtract: sub(); break; case R.id.multiply: multiply(); break; case R.id.divide: divide(); break; case R.id.clear: clear(); break; // 计算结果 case R.id.result: result(); if (!errBoolean && flagBoolean) { output.setText(String.valueOf(result)); } default: break; } // if(strold==""&&act==' '&&str=="") // { // input.setText(""); // } // else { // input.setText(strold+act+str); // } if (act == 'k') { input.setText(strold); } else { input.setText(strold + act + str); } if (act == 'p') { input.setText(strold); } else { input.setText(strold + act + str); } output.setText(String.valueOf(result)); } private void kaifang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'k'; strold = str; // str=""; result(); } } private void pingfang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'p'; strold = str; // str=""; result(); } } //退格功能 private void backspace() { // TODO Auto-generated method stub String str1=input.getText().toString(); if(input.length()>0){ input.setText(str1.substring(0, str1.length()-1)); } } private void dot() { // TODO Auto-generated method stub if (!flagDot) { str = str + "."; flagBoolean = false; flagDot = true; } // str=str+i; // flagBoolean=false; } //清空 private void clear() { // TODO Auto-generated method stub str = strold = ""; count = 0; act = ' '; result = 0.0; flagBoolean = false; flagDot = false; input.setText(strold + act + str); output.setText(""); } private void divide() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '/'; flagBoolean = false; } } private void multiply() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '*'; flagBoolean = false; } } private void sub() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '-'; flagBoolean = false; } } private void add() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '+'; flagBoolean = false; } } private void check() { // TODO Auto-generated method stub if (count >= 1) { result(); str = String.valueOf(result); } strold = str; str = ""; count++; flagDot = false; } // 计算输出结果 private void result() { // TODO Auto-generated method stub if (flagBoolean) { Double a, b; // if(act=='k'||act=='c') // { // a=Double.parseDouble(strold); // } // else { // a=Double.parseDouble(strold); // b=Double.parseDouble(str); // } a = Double.parseDouble(strold); b = Double.parseDouble(str); if (b == 0 && act == '/') { clear(); output.setText("除数不能为零!"); errBoolean = true; } if (!errBoolean) { switch (act) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; case 'k': result = Math.sqrt(a); break; case 'p': result = Math.pow(a,2); break; default: break; } } } } private void num(int i) { // TODO Auto-generated method stub str = str + String.valueOf(i); flagBoolean = true; } } } } ``` ```
JAVA多功能计算器,不能实现"√","1/x","log","sin"功能,下面附代码!请注释!
package exp099s; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class J11W099 extends JFrame { /** * */ private static final long serialVersionUID = 1L; private String front = "", behind = ""; //分别用于记录加减乘除运算符之前,之后输入的内容 private String op; //用于记录运算符 private String re;//用于存储运算结果的字符串格式 private boolean flag = false; //用于记录是否按下了运算符 private boolean flag1 = false;//用于判断是否输入了点运算符 private double result;//用于存储运算结果 private boolean flag2 = false;//用于判断是否输入了数字 private boolean flag3 = false;//用于判断是否按下了等号运算符 JPanel contentPane; JTextField txtResult = new JTextField("0"); JButton btnSqrt = new JButton("√"); JButton btnFour = new JButton("4"); JButton btnFive = new JButton("5"); JButton btnSix = new JButton("6"); JButton btnDecrease = new JButton("-"); JButton btnBegin = new JButton("C"); JButton btnOne = new JButton("1"); JButton btnTwo = new JButton("2"); JButton btnThree = new JButton("3"); JButton btnMultiply = new JButton("*"); JButton btnCancel = new JButton("←"); JButton btnZero = new JButton("0"); JButton btnMinus = new JButton("+/-"); JButton btnPoint = new JButton("."); JButton btnDivide = new JButton("/"); JButton btnEqual = new JButton("="); JButton btnIncrease = new JButton("+"); JButton btnSeven = new JButton("7"); JButton btnEight = new JButton("8"); JButton btnNine = new JButton("9"); JButton btnDown = new JButton("1/x"); JButton btnSin = new JButton("sin"); JButton btnLog = new JButton("log"); public J11W099() { try { setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); } catch (Exception exception) { exception.printStackTrace(); } } private void jbInit() throws Exception { contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); this.setResizable(false); setSize(new Dimension(400, 300)); setTitle("计算器"); txtResult.setEnabled(false); txtResult.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); txtResult.setEditable(false); txtResult.setHorizontalAlignment(SwingConstants.RIGHT); txtResult.setBounds(new Rectangle(33, 19, 378, 34)); //btnNull.addActionListener(new FrameCalculate_btnNull_actionAdapter(this)); //第一行 btnSeven.setBounds(new Rectangle(33, 70, 46, 37)); btnSeven.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnEight.setBounds(new Rectangle(101, 70, 46, 37)); btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnNine.setBounds(new Rectangle(167, 70, 46, 37)); btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnIncrease.setBounds(new Rectangle(234, 70, 46, 37)); btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnSqrt.setBounds(new Rectangle(298, 70, 46, 37)); btnSqrt.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12)); btnBegin.setBounds(new Rectangle(366, 70, 46, 37)); btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15)); //第二行 btnFour.setBounds(new Rectangle(33, 120, 46, 37)); btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnFive.setBounds(new Rectangle(101, 120, 46, 37)); btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnSix.setBounds(new Rectangle(167, 119, 46, 37)); btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnDecrease.setBounds(new Rectangle(234, 120, 46, 37)); btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnDown.setBounds(new Rectangle(298, 121, 46, 37)); btnDown.setFont(new java.awt.Font("Dialog", Font.PLAIN, 8)); btnCancel.setBounds(new Rectangle(366, 121, 46, 37)); btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12)); //第三行 btnOne.setBounds(new Rectangle(33, 172, 46, 37)); btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnTwo.setBounds(new Rectangle(101, 172, 46, 37)); btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnThree.setBounds(new Rectangle(167, 172, 46, 37)); btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnMultiply.setBounds(new Rectangle(234, 172, 46, 37)); btnMultiply.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnSin.setBounds(new Rectangle(298, 172, 46, 37)); btnSin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 9)); btnLog.setBounds(new Rectangle(366, 172, 46, 37)); btnLog.setFont(new java.awt.Font("Dialog", Font.PLAIN, 9)); //第四行 btnZero.setBounds(new Rectangle(33, 222, 46, 37)); btnZero.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnMinus.setBounds(new Rectangle(101, 222, 46, 37)); btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); btnPoint.setBounds(new Rectangle(167, 222, 46, 37)); btnPoint.setFont(new java.awt.Font("Dialog", Font.PLAIN, 30)); btnPoint.setHorizontalTextPosition(SwingConstants.CENTER); btnDivide.setBounds(new Rectangle(234, 222, 46, 37)); btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnEqual.setBounds(new Rectangle(298, 222, 114, 37)); btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); //加载C和←的监听事件 btnBegin.addActionListener(new Calculate_btnBegin_actionAdapter(this)); btnCancel.addActionListener(new Calculate_btnCancel_actionAdapter(this)); //加载√ 1/x log sin 的监听事件 btnSqrt.addActionListener(new Calculate_btnSqrt_actionAdapter(this)); btnDown.addActionListener(new Calculate_btnDown_actionAdapter(this)); btnLog.addActionListener(new Calculate_btnLog_actionAdapter(this)); btnSin.addActionListener(new Calculate_btnSin_actionAdapter(this)); //加载数字0-9的监听事件 btnZero.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnOne.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnTwo.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnThree.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnFour.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnFive.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnSix.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnSeven.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnEight.addActionListener(new Calculate_btnZero_actionAdapter(this)); btnNine.addActionListener(new Calculate_btnZero_actionAdapter(this)); //加载+/- . = 的监听事件 btnMinus.addActionListener(new Calculate_btnMinus_actionAdapter(this)); btnPoint.addActionListener(new Calculate_btnPoint_actionAdapter(this)); btnEqual.addActionListener(new Calculate_btnEqual_actionAdapter(this)); //加载加减乘除运算符的监听事件 btnIncrease.addActionListener(new Calculate_btnIncrease_actionAdapter(this)); btnDecrease.addActionListener(new Calculate_btnIncrease_actionAdapter(this)); btnMultiply.addActionListener(new Calculate_btnIncrease_actionAdapter(this)); btnDivide.addActionListener(new Calculate_btnIncrease_actionAdapter(this)); contentPane.add(btnFive); contentPane.add(btnSix); contentPane.add(btnDecrease); contentPane.add(btnBegin); contentPane.add(btnOne); contentPane.add(btnTwo); contentPane.add(btnThree); contentPane.add(btnMultiply); contentPane.add(btnCancel); contentPane.add(btnMinus); contentPane.add(btnPoint); contentPane.add(btnDivide); contentPane.add(btnEqual); contentPane.add(btnEight); contentPane.add(btnNine); contentPane.add(btnFour); contentPane.add(btnSeven); contentPane.add(btnIncrease); contentPane.add(btnSqrt); contentPane.add(txtResult); contentPane.add(btnZero); contentPane.add(btnDown); contentPane.add(btnSin); contentPane.add(btnLog); } public void btnZero_actionPerformed(ActionEvent e) { if (flag) { //如果刚刚按下了运算符 txtResult.setText(""); if (flag1) {//判断之前是否输入了点运算符 txtResult.setText("0." + e.getActionCommand()); flag1 = false; } else { txtResult.setText(e.getActionCommand()); } flag2 = true; } else { int num = txtResult.getText().indexOf("."); if (num < 0 && !txtResult.getText().equals("0")) { txtResult.setText(txtResult.getText() + e.getActionCommand()); } else if (num < 0 && txtResult.getText().equals("0")) { txtResult.setText(e.getActionCommand()); } else if (num >= 0 && txtResult.getText().equals("0")) { txtResult.setText("0." + e.getActionCommand()); } else if (num >= 0 && !txtResult.getText().equals("0")) { txtResult.setText(txtResult.getText() + e.getActionCommand()); } } flag = false; flag3=false; } public void btnIncrease_actionPerformed(ActionEvent e) { if(flag3){ txtResult.setText(txtResult.getText()); op = e.getActionCommand(); //得到刚刚按下的运算符 front = txtResult.getText(); //记录加减乘除运算符之前输入的内容 } else if (flag2) { ActionEvent ee = new ActionEvent("qq", 1, "pp"); btnEqual_actionPerformed(ee); op = e.getActionCommand(); //得到刚刚按下的运算符 front = re; flag2 = false; } else { front = txtResult.getText(); //记录加减乘除运算符之前输入的内容 op = e.getActionCommand(); //得到刚刚按下的运算符 } flag3=false; flag = true; //记录已经按下了加减乘除运算符的其中一个 } public void btnEqual_actionPerformed(ActionEvent e) { if(!flag3)//未曾按下等于运算符 behind = txtResult.getText(); else front = re; try { double a1 = Double.parseDouble(front); double b1 = Double.parseDouble(behind); if (op == "+") { result = a1 + b1; } else if (op == "-") { result = a1 - b1; } else if (op == "*") { result = a1 * b1; } else { result = a1 / b1; } re = Double.toString(result); txtResult.setText(re); } catch (ArithmeticException ce) { txtResult.setText("除数不能为零"); } catch (Exception ee) { } if (!flag3) flag3 = true; } public void btnPoint_actionPerformed(ActionEvent e) { int num=txtResult.getText().indexOf("."); if(num<0 && !flag) txtResult.setText(txtResult.getText()+e.getActionCommand()); if(flag) flag1=true; } public void btnBegin_actionPerformed(ActionEvent e) {//清零运算符事件处理 flag=false; flag1=false; flag2=false; flag3=false; front=""; behind=""; re=""; txtResult.setText("0"); } public void btnMinus_actionPerformed(ActionEvent e) {//取反运算符事件处理 if(txtResult.getText().equals("0")){//如果文本框内容为0 txtResult.setText(txtResult.getText()); }else if(txtResult.getText().indexOf("-")>=0){//若文本框中含有负号 String a=txtResult.getText().replaceAll("-",""); txtResult.setText(a); }else if(flag){ txtResult.setText("0"); }else{ txtResult.setText("-"+txtResult.getText()); } } public void btnCancel_actionPerformed(ActionEvent e) {//退格事件处理方法 String str=txtResult.getText(); if(str.length() == 1){//如文本框中只剩下最后一个字符,将文本框内容置为0 txtResult.setText("0"); } if(str.length()>1){ str=str.substring(0,str.length()-1); txtResult.setText(str); } } public static void main(String[] args){ J11W099 fc = new J11W099(); fc.setSize(468,310); fc.setLocation(200,150); fc.setVisible(true); } } //监听事件的类 class Calculate_btnCancel_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnCancel_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnCancel_actionPerformed(e); } } class Calculate_btnMinus_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnMinus_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnMinus_actionPerformed(e); } } class Calculate_btnBegin_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnBegin_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnBegin_actionPerformed(e); } } class Calculate_btnPoint_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnPoint_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnPoint_actionPerformed(e); } } class Calculate_btnEqual_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnEqual_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnEqual_actionPerformed(e); } } class Calculate_btnIncrease_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnIncrease_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnIncrease_actionPerformed(e); } } class Calculate_btnZero_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnZero_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnZero_actionPerformed(e); } } class Calculate_btnSqrt_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnSqrt_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnZero_actionPerformed(e); } } class Calculate_btnDown_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnDown_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnZero_actionPerformed(e); } } class Calculate_btnLog_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnLog_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnZero_actionPerformed(e); } } class Calculate_btnSin_actionAdapter implements ActionListener { private J11W099 adaptee; Calculate_btnSin_actionAdapter(J11W099 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnZero_actionPerformed(e); } }
android下的计算器中的退格功能实现不了,麻烦各位大神啦,谢谢!!
private EditText output = null; private EditText input = null; private Button btn0 = null; private Button btn1 = null; private Button btn2 = null; private Button btn3 = null; private Button btn4 = null; private Button btn5 = null; private Button btn6 = null; private Button btn7 = null; private Button btn8 = null; private Button btn9 = null; private Button btnadd = null; private Button btnsubtract = null; private Button btnmultiply = null; private Button btndivide = null; private Button btnclear = null; private Button btnresult = null; private Button btndot = null; private Button btnbackspace = null; private Button btnkaifang = null; private Button btnpingfang = null; private String str = "";// 保存数字 private String strold = "";// 原数字 private char act = ' ';// 记录“加减乘除等于”符号 private int count = 0;// 判断要计算的次数,如果超过一个符号,先算出来一部分 private Double result = 0.0;// 计算的输出结果 private Boolean errBoolean = false;// 有错误的时候为true,无错为false private Boolean flagBoolean = false;// 一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息 private Boolean flagDot = false; // 小数点标志位 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); output = (EditText) rootView.findViewById(R.id.output); input = (EditText) rootView.findViewById(R.id.input); btn0 = (Button) rootView.findViewById(R.id.zero); btn1 = (Button) rootView.findViewById(R.id.one); btn2 = (Button) rootView.findViewById(R.id.two); btn3 = (Button) rootView.findViewById(R.id.three); btn4 = (Button) rootView.findViewById(R.id.four); btn5 = (Button) rootView.findViewById(R.id.five); btn6 = (Button) rootView.findViewById(R.id.six); btn7 = (Button) rootView.findViewById(R.id.seven); btn8 = (Button) rootView.findViewById(R.id.eight); btn9 = (Button) rootView.findViewById(R.id.nine); btnadd = (Button) rootView.findViewById(R.id.add); btnsubtract = (Button) rootView.findViewById(R.id.subtract); btnmultiply = (Button) rootView.findViewById(R.id.multiply); btndivide = (Button) rootView.findViewById(R.id.divide); btnclear = (Button) rootView.findViewById(R.id.clear); btnresult = (Button) rootView.findViewById(R.id.result); btndot = (Button) rootView.findViewById(R.id.dot); btnbackspace = (Button) rootView.findViewById(R.id.zhengfu); btnkaifang = (Button) rootView.findViewById(R.id.kaifang); btnpingfang = (Button) rootView.findViewById(R.id.pingfang); // 设置按钮侦听事件 btn0.setOnClickListener(new BtnOnClickListener()); btn1.setOnClickListener(new BtnOnClickListener()); btn2.setOnClickListener(new BtnOnClickListener()); btn3.setOnClickListener(new BtnOnClickListener()); btn4.setOnClickListener(new BtnOnClickListener()); btn5.setOnClickListener(new BtnOnClickListener()); btn6.setOnClickListener(new BtnOnClickListener()); btn7.setOnClickListener(new BtnOnClickListener()); btn8.setOnClickListener(new BtnOnClickListener()); btn9.setOnClickListener(new BtnOnClickListener()); // 执行运算 btnadd.setOnClickListener(new BtnOnClickListener()); btnsubtract.setOnClickListener(new BtnOnClickListener()); btnmultiply.setOnClickListener(new BtnOnClickListener()); btndivide.setOnClickListener(new BtnOnClickListener()); btnclear.setOnClickListener(new BtnOnClickListener()); btnresult.setOnClickListener(new BtnOnClickListener()); btndot.setOnClickListener(new BtnOnClickListener()); btnbackspace.setOnClickListener(new BtnOnClickListener()); btnkaifang.setOnClickListener(new BtnOnClickListener()); btnpingfang.setOnClickListener(new BtnOnClickListener()); return rootView; } class BtnOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { // 输入数字 case R.id.zero: num(0); break; case R.id.one: num(1); break; case R.id.two: num(2); break; case R.id.three: num(3); break; case R.id.four: num(4); break; case R.id.five: num(5); break; case R.id.six: num(6); break; case R.id.seven: num(7); break; case R.id.eight: num(8); break; case R.id.nine: num(9); break; case R.id.dot: dot(); break; // 执行运算 // 退格功能 case R.id.zhengfu: backspace(); break; case R.id.kaifang: kaifang(); break; case R.id.pingfang: pingfang(); break; case R.id.add: add(); break; case R.id.subtract: sub(); break; case R.id.multiply: multiply(); break; case R.id.divide: divide(); break; case R.id.clear: clear(); break; // 计算结果 case R.id.result: result(); if (!errBoolean && flagBoolean) { output.setText(String.valueOf(result)); } default: break; } // if(strold==""&&act==' '&&str=="") // { // input.setText(""); // } // else { // input.setText(strold+act+str); // } if (act == 'k') { input.setText(strold); } else { input.setText(strold + act + str); } if (act == 'p') { input.setText(strold); } else { input.setText(strold + act + str); } output.setText(String.valueOf(result)); } private void kaifang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'k'; strold = str; // str=""; result(); } } private void pingfang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'p'; strold = str; // str=""; result(); } } //退格功能 private void backspace() { // TODO Auto-generated method stub String str1=input.getText().toString(); if(input.length()>0){ input.setText(str1.substring(0, str1.length()-1)); } } private void dot() { // TODO Auto-generated method stub if (!flagDot) { str = str + "."; flagBoolean = false; flagDot = true; } // str=str+i; // flagBoolean=false; } //清空 private void clear() { // TODO Auto-generated method stub str = strold = ""; count = 0; act = ' '; result = 0.0; flagBoolean = false; flagDot = false; input.setText(strold + act + str); output.setText(""); } private void divide() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '/'; flagBoolean = false; } } private void multiply() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '*'; flagBoolean = false; } } private void sub() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '-'; flagBoolean = false; } } private void add() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '+'; flagBoolean = false; } } private void check() { // TODO Auto-generated method stub if (count >= 1) { result(); str = String.valueOf(result); } strold = str; str = ""; count++; flagDot = false; } // 计算输出结果 private void result() { // TODO Auto-generated method stub if (flagBoolean) { Double a, b; // if(act=='k'||act=='c') // { // a=Double.parseDouble(strold); // } // else { // a=Double.parseDouble(strold); // b=Double.parseDouble(str); // } a = Double.parseDouble(strold); b = Double.parseDouble(str); if (b == 0 && act == '/') { clear(); output.setText("除数不能为零!"); errBoolean = true; } if (!errBoolean) { switch (act) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; case 'k': result = Math.sqrt(a); break; case 'p': result = Math.pow(a,2); break; default: break; } } } } private void num(int i) { // TODO Auto-generated method stub str = str + String.valueOf(i); flagBoolean = true; } }
Java 自制的计算器菜单键无法复制
代码如下: import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JTextField; /** * 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。 */ public class Calculator extends JFrame implements ActionListener { /** 计算器上的键的显示名字 */ private final String[] KEYS = { "7", "8", "9", "/", "4", "5", "6", "*" , "1", "2", "3","-", "0","+/-",".","+", "1/x", "%", "sqrt", "=" }; /** 计算器上的功能键的显示名字 */ private final String[] COMMAND = { "Backspace", "C" }; /** 计算器上键的按钮 */ private JButton keys[] = new JButton[KEYS.length]; /** 计算器上的功能键的按钮 */ private JButton commands[] = new JButton[COMMAND.length]; /** 计算结果文本框 */ private JTextField resultText = new JTextField("0"); // private JMenuBar mb=new JMenuBar(); //编辑 private JMenu mEdit = new JMenu("编辑(E)"); //复制黏贴 private JMenuItem mCopy = new JMenuItem("复制(C)"); private JMenuItem mPaste = new JMenuItem("黏贴(V)"); //剪切板 private StringBuffer copyBoard=new StringBuffer(20); // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private boolean firstDigit = true; // 计算的中间结果。 private double resultNum = 0.0; // 当前运算的运算符 private String operator = "="; // 操作是否合法 private boolean operateValidFlag = true; /** * 构造函数 */ public Calculator() { super(); // 初始化计算器 init(); // 设置计算器的背景颜色 this.setBackground(Color.LIGHT_GRAY); this.setTitle("计算器"); // 在屏幕(500, 300)坐标处显示计算器 this.setLocation(500, 300); // 许修改计算器的大小 this.setResizable(true); // 使计算器中各组件大小合适 this.pack(); //添加菜单与目录 this.setJMenuBar(mb); mb.add(mEdit); mEdit.setMnemonic(KeyEvent.VK_E); mEdit.add(mCopy); mEdit.add(mPaste); } /** * 初始化计算器 */ private void init() { // 文本框中的内容采用右对齐方式 resultText.setHorizontalAlignment(JTextField.RIGHT); // 允许修改结果文本框 resultText.setEditable(true); // 设置文本框背景颜色为白色 resultText.setBackground(Color.white); // 初始化计算器上键的按钮,将键放在一个画板内 JPanel calckeysPanel = new JPanel(); // 用网格布局器,5行,4列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calckeysPanel.setLayout(new GridLayout(5, 4, 0, 0)); for (int i = 0; i < KEYS.length; i++) { keys[i] = new JButton(KEYS[i]); calckeysPanel.add(keys[i]); keys[i].setForeground(Color.black); } // 初始化功能键,都用红色标示。将功能键放在一个画板内 JPanel commandsPanel = new JPanel(); // 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 commandsPanel.setLayout(new GridLayout(1, 3, 0, 0)); for (int i = 0; i < COMMAND.length; i++) { commands[i] = new JButton(COMMAND[i]); commandsPanel.add(commands[i]); } // 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部, // 将文本框放在北部,将calms画板放在计算器的西部。 // 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内 JPanel panel1 = new JPanel(); // 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(new BorderLayout(3, 3)); panel1.add("North", commandsPanel); panel1.add("Center", calckeysPanel); // 建立一个画板放文本框 JPanel top = new JPanel(); top.setLayout(new BorderLayout()); top.add("Center", resultText); // 整体布局 getContentPane().setLayout(new BorderLayout(3, 5)); getContentPane().add("North", top); getContentPane().add("Center", panel1); // 为各按钮添加事件侦听器 // 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener for (int i = 0; i < KEYS.length; i++) { keys[i].addActionListener(this); } for (int i = 0; i < COMMAND.length; i++) { commands[i].addActionListener(this); } } /** * 处理事件 */ public void actionPerformed(ActionEvent e) { // 获取事件源的标签 String label = e.getActionCommand(); if(label.equals("复制(C)")) { String temp = resultText.getText().trim(); copyBoard.replace(0, copyBoard.length(), temp); } else if(label.equals("黏贴(V)")) { resultText.setText(copyBoard.toString()); }else if (label.equals(COMMAND[0])) { // 用户按了"Backspace"键 handleBackspace(); }else if (label.equals(COMMAND[1])) { // 用户按了"C"键 handleC(); } else if ("0123456789.".indexOf(label) >= 0) { // 用户按了数字键或者小数点键 handleNumber(label); // handlezero(zero); } else { // 用户按了运算符键 handleOperator(label); } } /** * 处理Backspace键被按下的事件 */ private void handleBackspace() { String text = resultText.getText(); int i = text.length(); if (i > 0) { // 退格,将文本最后一个字符去掉 text = text.substring(0, i - 1); if (text.length() == 0) { // 如果文本没有了内容,则初始化计算器的各种值 resultText.setText("0"); firstDigit = true; operator = "="; } else { // 显示新的文本 resultText.setText(text); } } } /** * 处理数字键被按下的事件 * * @param key */ private void handleNumber(String key) { if (firstDigit) { // 输入的第一个数字 resultText.setText(key); } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面 resultText.setText(resultText.getText() + "."); } else if (!key.equals(".")) { // 如果输入的不是小数点,则将数字附在结果文本框的后面 resultText.setText(resultText.getText() + key); } // 以后输入的肯定不是第一个数字了 firstDigit = false; } /** * 处理C键被按下的事件 */ private void handleC() { // 初始化计算器的各种值 resultText.setText("0"); firstDigit = true; operator = "="; } /** * 处理运算符键被按下的事件 * * @param key */ private void handleOperator(String key) { if (operator.equals("/")) { // 除法运算 // 如果当前结果文本框中的值等于0 if (getNumberFromText() == 0.0) { // 操作不合法 operateValidFlag = false; resultText.setText("除数不能为零"); } else { resultNum /= getNumberFromText(); } } else if (operator.equals("1/x")) { // 倒数运算 if (resultNum == 0.0) { // 操作不合法 operateValidFlag = false; resultText.setText("零没有倒数"); } else { resultNum = 1 / resultNum; } } else if (operator.equals("+")) { // 加法运算 resultNum += getNumberFromText(); } else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } else if (operator.equals("*")) { // 乘法运算 resultNum *= getNumberFromText(); } else if (operator.equals("sqrt")) { // 平方根运算 resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { // 百分号运算,除以100 resultNum = resultNum / 100; } else if (operator.equals("+/-")) { // 正数负数运算 resultNum = resultNum * (-1); } else if (operator.equals("=")) { // 赋值运算 resultNum = getNumberFromText(); } if (operateValidFlag) { // 双精度浮点数的运算 long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { resultText.setText(String.valueOf(t1)); } else { resultText.setText(String.valueOf(resultNum)); } } // 运算符等于用户按的按钮 operator = key; firstDigit = true; operateValidFlag = true; } /** * 从结果文本框中获取数字 * * @return */ private double getNumberFromText() { double result = 0; try { result = Double.valueOf(resultText.getText()).doubleValue(); } catch (NumberFormatException e) { } return result; } public static void main(String args[]) { Calculator calculator1 = new Calculator(); calculator1.setVisible(true); calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
如何实现按“.”键实现退格的功能?
一个比较特别的需求,用于输入法的输入串,例如键入:“i.” 就将i给删掉。 我试过将“.”等效于回退符\b,但是不知为何整个字符串都变成了框框,所以这个方法就算了。求高手,求大牛,最好给出具体代码
用C51编写单片机程序实现10以内的加减乘除的简易计算器
运行80C51单片机C51语言编写程序,在51实验小系统上实现“十以内的简易计算器”,即:定义51实验小系统上的按键分别为0~9数字键、‘+’、“-”“*”“/”‘=’、退格等功能键;识别相关按键,按照十以内加法的正确逻辑在数码管上显示按键对应的信息,并完成加法运算,在数码管上显示加法结果。 实验内容两个层次—— 层次一:加法的结果在十以内; 层次二:两个加数分别在十以内。
java控制台输出\r不能实现返回行首,\b不能退格,怎么回事?
``` System.out.print("a"); System.out.print("\r"); System.out.print("b"); ``` 输出结果: ![图片说明](https://img-ask.csdn.net/upload/201911/27/1574817026_495028.png) ``` System.out.print("a"); System.out.print("\b"); System.out.print("b"); ``` 输出结果: ![图片说明](https://img-ask.csdn.net/upload/201911/27/1574816982_937444.png)
linux中按退格键显示 ^H问题
程序代码说明: 通过read函数读入一段字符 到 buf中 并通过printf函数显示出来 为了按下回车键实现擦除功能,而不显示^H字符,所以修改termios状态 程序代码如下 int main() { char buf[256] = {0}; struct termios term; struct termios oldterm; if(tcgetattr(STDIN_FILENO, &term) == -1)//得到系统termion的设置 { printf("tcgetattr error is %s\n", strerror(errno)); return; } oldterm = term; term.c_cc[VERASE] = 8;//'\b'为退格键的ASCII码 if (tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1)//设置系统termion { printf("tcsetattr error is %s\n", strerror(errno)); } read(STDIN_FILENO, buf, sizeof(buf)-1); printf("%s\n", buf); if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &oldterm) == -1) { printf("tcsetattr error is %s\n", strerror(errno)); } return 0; } 问题: 通过secure-CRT远程控制centos7系统, 执行该程序,可以满足功能,按退格键即实现擦除功能 直接在centos7上执行,按退格键反而出现“^?”。若不修改termios状态,反而可以实现退格键擦除功能。 为什么同一程序,会出现不同结果??
求计算器简单加减乘除功能代码
<html> <head> <title>计算器</title> <!-- 外部css --> <link rel="stylesheet" href="src/css/mycss.css"/> <!-- 外部移动层JS --> <script language="javascript" src="src/js/yidong.js"></script> <!-- 外部计算功能JS --> <script language="javascript" src="src/js/jisuan.js"></script> </head> <style> div{width:100%;height:800px;background:gray;} </style> <body bgcolor="teal"><center/> <div onmousemove="mouseMove()"> <div id="ceng" onmousedown="mouseDown()" onmouseup="mouseUp()" style="top:100px;left:400px;position:absolute;width:350px;height:420px;cursor:url(src/img/箭头-国旗.ani),defanlt;">简单的计算器 <!-- 表单 --> <form> <!-- 层的边框大小样式颜色 --> <table id="tb" style="border:10px inset #88bef4" align="center"> <td colspan="4"> <input type="text" id="kg"/> </td> </tr> <tr> <td><input type="button" value="1" id="kg1"/></td> <td><input type="button" value="2" id="kg1"/></td> <td><input type="button" value="3" id="kg1"/></td> <td><input type="button" value="+" id="kg1"/></td> </tr> <tr> <td><input type="button" value="4" id="kg1"></td> <td><input type="button" value="5" id="kg1"/></td> <td><input type="button" value="6" id="kg1"/></td> <td><input type="button" value="-" id="kg1"/></td> </tr> <tr> <td><input type="button" value="7" id="kg1"/></td> <td><input type="button" value="8" id="kg1"/></td> <td><input type="button" value="9" id="kg1"/></td> <td><input type="button" value="*" id="kg1"/></td> </tr> <tr> <td><input type="button" value="." id="kg1"/></td> <td><input type="button" value="0" id="kg1"/></td> <td><input type="button" value="%" id="kg1"/></td> <td><input type="button" value="/" id="kg1"/></td> </tr> <tr> <td><input type="button" value="清楚" id="kg1"/></td> <td><input type="button" value="退格" id="kg1"/></td> <td colspan="2"><input type="button" value="=" id="kg2"/></td> </tr> </table> </form> </div> </div> </body> </html> 这里如何添加计算功能 最好是可以连续加减乘除的 比如 1+2*3/2=
(编码)为什么“が”在编辑框按退格会变成“か”,而“が”则不会?
为什么“が”在编辑框按退格会变成“か”,而“が”则不会?比如百度的搜索框。
Java中 关于SWT中Text文本框的输入问题
先贴代码: ``` Text showText = new Text(showArea, SWT.NONE | SWT.RIGHT_TO_LEFT | SWT.WRAP); showText.addVerifyListener(new VerifyListener() { @Override public void verifyText(VerifyEvent e) { // TODO Auto-generated method stub boolean b = "0123456789.+-*%^√".indexOf(e.character) >= 0; e.doit = b; // doit属性如果为true,则字符允许输入,反之不允许 return; } }); ``` 用了这个之后就只有 _**0123456789.+-*%^√**_可输入了 可我还想要Backspace的退格功能,我该怎么做? 先说一下这个代码的用途吧,我是想要做一个计算器 那么还有一个问题就是小数点** .**只能出现一次 我设了一个静态布尔量来检测当前是否有小数点 . ``` public static boolean spot = false; ``` 再看代码: public static String Back(String s) { // back 消除一个字符 if (s.length() > 0) { if (s.indexOf(".") == 0) Start.spot = false; return s.substring(0, s.length() - 1); } else { Start.spot = true; return "0"; } } 这是在另一个类中定义的一个方法来实现界面上退格按钮的功能,之前我在 showText.addVerifyListener(new VerifyListener() { @Override public void verifyText(VerifyEvent e) { // TODO Auto-generated method stub boolean b = "0123456789.+-*%^√".indexOf(e.character) >= 0; e.doit = b; // doit属性如果为true,则字符允许输入,反之不允许 return; } }); 中也加入了对小数点的检测来决定e.doit的值,可是事实上会出现**0.2.23.**这种情况,但是不会连着几个点一起输入进去 还有一个问题,Back函数在文本框字符大于三个后便不起作用了,不知为何 贴上Back按钮的代码 keyButtons[15].addSelectionListener(new SelectionAdapter() { // "Back" //Calculator 是我定义的一个类,专门用来盛放计算器面板上各个按钮的功能 public void widgetSelected(SelectionEvent e) { if (showText.getCharCount() > 0) showText.setText(Calculator.Back(showText.getText())); showText.setSelection(showText.getCharCount()); shell.setFocus(); } }); 所以目前有三个关于这个Text的问题 1. 怎样才能使键盘上的Back键起作用 2.怎样控制小数点只能出现一次 3.Back函数是怎么了...(因为文本框里有两个字符时它还是可用的) 求解答
我的网站登录之后按退格键变成退出登录,返回到登录界面?
我的网站登录之后按退格键变成退出登录,返回到登录界面? 登录是成功的,已经进入到登录成功页面,但是一按退格键就返回上一页,这是什么异常? 如何处理啊?
Centos7下键盘无法输入字母数字 回车退格都正常 是怎么回事 请教大神
Centos7下键盘无法输入字母数字 回车退格都正常 是怎么回事 请教大神
关于Java中for循环的问题
刚刚做了一道编程题,我把题目简化如下: 给定一个只包含小写字母和#的字符串,其中#代表退格字符,要求把处理后的字符串输出。例如,输入:ab#c,输出:ac;输入:ab##,输出为空;输入:#a#c,输出:c。 我的程序如下: ``` import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.next(); StringBuffer sb1=new StringBuffer(s); for(int i=0;i<sb1.length()-1;i++) { while(sb1.charAt(0)=='#') sb1.deleteCharAt(0); if(sb1.charAt(i)=='#') { sb1.delete(i-1,i+1); i=-1; } } System.out.println(sb1); } } ``` 问题在于,我输入ab##,输出却是a#,调试后发现是for循环出问题,判断条件即使为真也退出了循环,应该怎么修改?
初学java,看教材上Swing包和awt包章节里的示例程序时,遇到的关于调用对象方法的一点小问题
先上示例程序 java文件1 Example10_8.java public class Example10_8 { public static void main(String[] args) { WindowLiaoning win =new WindowLiaoning(); } } java文件2 WindowLiaoning.java import javax.swing.*; import java.awt.*; public class WindowLiaoning extends JFrame{ JTextField text; DigitDocumnet document; public WindowLiaoning(){ init(); setBounds(100,100,300,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void init(){ text = new JTextField(20); setLayout(new FlowLayout()); document = new DigitDocumnet(); text.setDocument(document); add(text); } } java文件3 DigitDocumnet.java import javax.swing.text.*; public class DigitDocumnet extends PlainDocument{ int count = 1; public void insertString(int offset,String s,AttributeSet a){ char c= s.charAt(0); if(c<='9'&&c>='0'&&count<=8){ try{ super.insertString(offset, s, a); count++; } catch(BadLocationException e){ } } } public void remove(int offset, int length){ try{ super.remove(offset, length); count--; } catch(BadLocationException e){} } } 这个demo包含三个java文件,功能是实现一个只能输入8个数字字符的文本框,这里有个小问题,就是在文本框里进行字符删除时,remove方法会被自动调用执行,这里我不太明白,参数length是如何指定的,书上说length初始化时为1,我们按回车键删除时都是一个字符一个字符删除的,是每删除一个字符调用一次吗,然后在文本框里一直按退格键backspace的话,count--为什么不会把count减到0以下呢?有些概念还不太清晰,望不吝赐教
新手提问:TextField的inputType='password'时,在ie浏览器里边不能用退格键Backspase删除文本输入框的内容。
var pwd = new Ext.form.TextField({ fieldLabel:'登录密码', id:'pwdid', allowBlank:false, blankText:'该项不能为空', name:'password', inputType:'password', width:200 }); 火狐浏览器可以用回格键(Backspace)删除文本输入框里的内容。ie浏览器不能用退格键删除文本输入框里的内容,但是可以用删除键(Delete)删除里边的内容。求大家指点 怎么在ie浏览器能使用Backspace回格键! 文本输入框pwd 作为FormPanel的items属性的一个元素。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
前后端分离后,维护接口文档基本上是必不可少的工作。 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
天天学JAVA-JAVA基础(6)
如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA 中最常使用字符串常量String相关知识。 1.String简介 2.创建字符串对象两种方式的区别 3.String常用的方法 4.String的不可变性 5.一道阿里面试题,你会做吗? 1.String简介 1.1String源码 首先看一段String源码,String主要实现了Serializable、Compar...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
2020 网络课 智慧树自动刷课代码,自动跳转,自动答题并关闭弹窗,自动1.5倍速静音
刷课一时爽,一直刷课一直爽! 终于让我找到了这个黑客代码了,教程开始: 只限谷歌浏览器和火狐浏览器使用,如果第一次失败,请重新试一下次 将下面代码复制后,进入浏览器按F12键,先点击console 然后Ctrl+v复制代码 最后按回车键即可 var ti = $("body"); var video = $(".catalogue_ul1 li[id*=video-]"); var i = 1;...
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估...
写1行代码影响1000000000人,这是个什么项目?
不带钱不带卡,只带手机出门就能畅行无阻,这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示,移动支付在手机网民中的渗透率高达95.1%,截至今年1月,支付宝全球用户数已经突破10亿。你或许每天都会打开支付宝,付款购物、领取权益、享受服务……但你或许不知道的是,在这个方便、快捷、智能化的APP背后,有一群年轻的技术人,用智慧和创新让它每天都变得更“聪明”一点。 ...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
一点一滴记录 Java 8 stream 的使用
日常用到,一点一滴记录,不断丰富,知识积累,塑造自身价值。欢迎收藏 String 转 List String str = 1,2,3,4; List&lt;Long&gt; lists = Arrays.stream(str.split(",")).map(s -&gt; Long.parseLong(s.trim())).collect(Collectors.toList()); Lis...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问