1

I'm really new into programming as I'm learning Android app development and I'm trying to learn Java in parallel. So forgive me for not having much logic.

In this calculator app I have created I used it for 2 numbers,but I'm having trouble how to modify it for as many numbers as I input as I believe it is not possible to store each value inside a variable. How can I modify this code for calculation of as many numbers as possible?

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,badd,bsub,bmul,bdiv,bc,bequals;
    float a,b;
    EditText edit;
    String operator;
int flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b1=(Button)findViewById(R.id.button);
    b2=(Button)findViewById(R.id.button2);
    b3=(Button)findViewById(R.id.button3);
    b4=(Button)findViewById(R.id.button4);
    b5=(Button)findViewById(R.id.button5);
    b6=(Button)findViewById(R.id.button6);
    b7=(Button)findViewById(R.id.button7);
    b8=(Button)findViewById(R.id.button8);
    b9=(Button)findViewById(R.id.button9);
    b0=(Button)findViewById(R.id.button0);
    badd=(Button)findViewById(R.id.buttonadd);
    bsub=(Button)findViewById(R.id.buttonsub);
    bmul=(Button)findViewById(R.id.buttonmul);
    bdiv=(Button)findViewById(R.id.buttondiv);
    bc=(Button)findViewById(R.id.buttonclear);
    bequals=(Button)findViewById(R.id.button14);
    edit=(EditText)findViewById(R.id.text);
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"1");
        }
    });
    b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"2");
        }
    });
    b3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"3");
        }
    });
    b4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"4");
        }
    });
    b5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"5");
        }
    });
    b6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"6");
        }
    });
    b7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"7");
        }
    });
    b8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"8");
        }
    });
    b9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"9");
        }
    });
    b0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag==1)
            {
                edit.setText("");
                flag=0;
            }
            edit.setText(edit.getText()+"0");
        }
    });
    bc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            edit.setText("");
        }
    });
    badd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a=Float.parseFloat(edit.getText()+"");
             operator="sum";
            edit.setText("");
        }
    });
    bsub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a=Float.parseFloat(edit.getText()+"");
            operator="sub";
            edit.setText("");
        }
    });
    bmul.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a=Float.parseFloat(edit.getText()+"");
            operator="mul";
            edit.setText("");
        }
    });
    bdiv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a=Float.parseFloat(edit.getText()+"");
            operator="div";
            edit.setText("");
        }
    });
    bequals.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            b=Float.parseFloat(edit.getText()+"");
            if(operator.equals("sum"))
            {
                edit.setText(a+b+"");

            }
            if(operator.equals("sub"))
            {
                edit.setText(a-b+"");
            }
            if(operator.equals("mul"))
            {
                edit.setText(a*b+"");
            }
            if(operator.equals("div"))
            {
                edit.setText(a/b+"");
            }
            flag=1;
        }
    });
}}
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/activity_main"
     android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.hello.mycalculator.MainActivity">

    <Button
        android:text="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="21dp"
        android:layout_marginTop="114dp"
        android:id="@+id/button" />

    <Button
        android:text="2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/button"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button"
        android:layout_above="@+id/button4" />

    <Button
        android:text="3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button2"
        android:layout_toEndOf="@+id/button2"
        android:id="@+id/button3" />

    <Button
        android:text="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/button"
        android:id="@+id/button4"
        android:layout_below="@+id/button" />

    <Button
        android:text="5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button4"
        android:layout_toStartOf="@+id/button3"
        android:id="@+id/button5" />

    <Button
        android:text="7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/button4"
        android:id="@+id/button7"
        android:layout_below="@+id/button4" />

    <Button
        android:text="6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button6"
        android:layout_alignBaseline="@+id/button5"
        android:layout_alignBottom="@+id/button5"
        android:layout_alignStart="@+id/button3" />

    <Button
        android:text="8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button5"
        android:layout_alignEnd="@+id/button5"
        android:id="@+id/button8" />

    <Button
        android:text="9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button9"
        android:layout_below="@+id/button6"
        android:layout_alignStart="@+id/button6" />

    <Button
        android:text="+"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonadd"
        android:layout_below="@+id/button7"
        android:layout_alignStart="@+id/button" />

    <Button
        android:text="/"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button3"
        android:layout_toEndOf="@+id/button3"
        android:id="@+id/buttondiv" />

    <EditText
        android:textAlignment="viewEnd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="45dp"
        android:id="@+id/text"
        android:layout_above="@+id/button2"
        android:layout_alignStart="@+id/button"
        android:layout_alignEnd="@+id/buttondiv" />

    <Button
        android:text="0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button0"
        android:layout_alignBaseline="@+id/buttonadd"
        android:layout_alignBottom="@+id/buttonadd"
        android:layout_toEndOf="@+id/buttonadd" />

    <Button
        android:text="="
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button14"
        android:layout_below="@+id/button9"
        android:layout_toEndOf="@+id/button0" />

    <Button
        android:text="*"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonmul"
        android:layout_below="@+id/buttondiv"
        android:layout_toEndOf="@+id/button3" />

    <Button
        android:text="c"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonclear"
        android:layout_alignBaseline="@+id/button9"
        android:layout_alignBottom="@+id/button9"
        android:layout_toEndOf="@+id/button6" />

    <Button
        android:text="-"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonsub"
        android:layout_below="@+id/buttonclear"
        android:layout_toEndOf="@+id/button9" />
</RelativeLayout>
halfer
  • 19,824
  • 17
  • 99
  • 186
AntiNational
  • 47
  • 1
  • 10
  • 2
    First of all I'd look at creating one instance of an onClickListener and then assigning the button clicks to that one listener. http://stackoverflow.com/questions/25905086/multiple-buttons-onclicklistener-android – Bradley Wilson Jan 17 '17 at 14:35
  • You need to use reverse polish notation see here -algorithm http://www.java2s.com/Code/Java/Collections-Data-Structure/ReversePolishNotation.htm – Shubham Shukla Jan 17 '17 at 14:41
  • 1
    There is a separate [codereview.se] StackExchange. Might be suited better there. – Paul Kertscher Jan 17 '17 at 14:43
  • Thanks for that information. So regarding the logic, I should store numbers inside an array, right? – AntiNational Jan 17 '17 at 14:44

2 Answers2

0

You should not bloat the activity with so many buttons, consider using a grid view (RecyclerView with GridLayoutManager) to populate numPad and operators.

Make a reference of your operands as operandA and operandB, and you can perform operations on these and store it in result to display it to the user. Maybe attach a callback to your result textView for it for simplicity.

rahul.taicho
  • 1,339
  • 1
  • 8
  • 18
0

Sorry for the inconvenience cause, Here is the answer you wanted for float datatype--

Java-

    import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,badd,bsub,bmul,bdiv,bc,bequals;
    float a,b;
    EditText edit;
    String operator;
    int flag=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1=(Button)findViewById(R.id.button);
        b2=(Button)findViewById(R.id.button2);
        b3=(Button)findViewById(R.id.button3);
        b4=(Button)findViewById(R.id.button4);
        b5=(Button)findViewById(R.id.button5);
        b6=(Button)findViewById(R.id.button6);
        b7=(Button)findViewById(R.id.button7);
        b8=(Button)findViewById(R.id.button8);
        b9=(Button)findViewById(R.id.button9);
        b0=(Button)findViewById(R.id.button0);
        badd=(Button)findViewById(R.id.buttonadd);
        bsub=(Button)findViewById(R.id.buttonsub);
        bmul=(Button)findViewById(R.id.buttonmul);
        bdiv=(Button)findViewById(R.id.buttondiv);
        bc=(Button)findViewById(R.id.buttonclear);
        bequals=(Button)findViewById(R.id.button14);
        edit=(EditText)findViewById(R.id.text);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {




                edit.setText(edit.getText()+"1");
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"2");
            }
        });
        b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"3");
            }
        });
        b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"4");
            }
        });
        b5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"5");
            }
        });
        b6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"6");
            }
        });
        b7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"7");
            }
        });
        b8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"8");
            }
        });
        b9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"9");
            }
        });
        b0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                edit.setText(edit.getText()+"0");
            }
        });
        bc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                edit.setText("");
            }
        });
        badd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (operator!=""){
                    a+=(Float.parseFloat(edit.getText().toString()));
                }else{
                    a=Float.parseFloat(edit.getText()+"");
                }
                operator="sum";
                edit.setText("");
            }
        });
        bsub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (operator!=""){
                    a-=(Float.parseFloat(edit.getText().toString()));
                }else{
                    a=Float.parseFloat(edit.getText()+"");
                }

                operator="sub";
                edit.setText("");
            }
        });
        bmul.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (operator!=""){
                    a*=(Float.parseFloat(edit.getText().toString()));
                }else{
                    a=Float.parseFloat(edit.getText()+"");
                }
                operator="mul";
                edit.setText("");
            }
        });
        bdiv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (operator!=""){
                    a/=(Float.parseFloat(edit.getText().toString()));
                }else{
                    a=Float.parseFloat(edit.getText()+"");
                }
                operator="div";
                edit.setText("");
            }
        });
        bequals.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(operator.equals("sum"))
                {
                    edit.setText(a+(Float.parseFloat(edit.getText().toString()))+"");
                    a=a+(Float.parseFloat(edit.getText().toString()));
                    operator="";

                }
                if(operator.equals("sub"))
                {
                    edit.setText(a-(Float.parseFloat(edit.getText().toString()))+"");
                    a=a-(Float.parseFloat(edit.getText().toString()));
                    operator="";
                }
                if(operator.equals("mul"))
                {
                    edit.setText(a*(Float.parseFloat(edit.getText().toString()))+"");
                    a=a*(Float.parseFloat(edit.getText().toString()));
                    operator="";
                }
                if(operator.equals("div"))
                {
                    edit.setText(a/(Float.parseFloat(edit.getText().toString()))+"");
                    a=a/(Float.parseFloat(edit.getText().toString()));
                    operator="";
                }
            }
        });
    }}

Try this out . I've tested it. Please reply if it worked.

And one more advice, don't use RelativeLayout in these cases you should use LinearLayout in these simple cases. Use nested LinearLayout for this design. And you may use weights to give equal size proportions to all of them

AshAR
  • 228
  • 1
  • 14
  • Please accept the answer if it worked and vote it if you think it was good for what you wanted. I have done this in float datatype as you wanted . Enjoy!!! – AshAR Jan 18 '17 at 13:43