Làm sao để thực hiện phép tính cộng khi nối chuỗi lại với nhau?

Mình đang làm ứng dụng máy tính

Mình muốn khi ấn vào là : 1 + 1 + 2 +… + n = Kết quả
Đây là code:

String s, s1, s2;

btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            s = edtKetQua.getText().toString();
            edtKetQua.setText(s + "1");
        }
    });

    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            s = edtKetQua.getText().toString();
            edtKetQua.setText(s + "2");
        }
    });

btnCong.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String s = edtKetQua.getText().toString();
            edtKetQua.setText(s + "+");
            pheptoancong = true;
        }
    });

btnBang.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (pheptoancong == true) {
                s = edtKetQua.getText().toString();
                int i = s.indexOf("+");
                s1 = s.substring(i - 1, i); // truoc dau +
                s2 = s.substring(i); // sau dau +

                int so1 = Integer.parseInt(s1);
                int so2 = Integer.parseInt(s2);
                int ketqua = so1 + so2;

                edtKetQua.setText(ketqua + "");
            }
        }
    });

Cái đó gọi là expression evaluation
Bạn có thể tham khảo tạo đây. Và việc 1 + 2 + 3 gọi là infix expression.

4 Likes

Ok. thanks bạn, để mình nghiên cứu xem thế nào :slightly_smiling_face:

Nếu chỉ là phép cộng thôi thì dùng split() để tách chuỗi ra. Ví dụ như đoạn code sau:

    public static void main(String[] args) {
        String input = "11+12+13+14";
        System.out.println(sum(input));
    }
    
    private static int sum(String str)
    {
        int output = 0;
        for(String i : str.split("\\+"))
        {
            output += Integer.parseInt(i);
        }
        return output;
    }

Còn nếu bạn muốn phát triển hơn để thành 1 máy tính thực sự thì nên tìm hiểu về ký pháp balan

3 Likes

Mình áp dụng làm máy tính bỏ túi thì chỉ được nút cộng thôi, còn nút trừ thì ra kết quả ko đúng, Không biết bạn fix được ko ?

Đoạn code mình vừa áp dụng cách của bạn đây (Khi nhấn 1 - 2 thì lại bằng 3):

    btnBang.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            s = edtKetQua.getText().toString();

            if (pheptoancong == true) {
                edtKetQua.setText(sum(s) + "");
                pheptoancong = false;
            }

            if (pheptoantru == true) {
                edtKetQua.setText(sub(s) + "");
                pheptoantru = false;
            }

            if (pheptoannhan == true) {
                edtKetQua.setText(mul(s) + "");
                pheptoannhan = false;
            }

            if (pheptoanchia == true) {
                edtKetQua.setText(dev(s) + "");
                pheptoanchia = false;
            }

        }
    });

private int sum(String str) {
    int output = 0;
    for (String i : str.split("\\+")) {
        output += Integer.parseInt(i);
    }
    return output;
}

private int sub(String str) {
    int output = 0;
    for (String i : str.split("\\-")) {
        output -= Integer.parseInt(i);
    }
    return output;
}

Như mình đã nói ở trên, thuật toán trên chỉ áp dụng với 1 phép tình toán duy nhất. Còn bạn muốn tính thêm nhiều loại nữa thì phải dùng đến “Ký pháp Balan”.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?