Skip to content

Instantly share code, notes, and snippets.

@Alouush
Created December 23, 2018 21:04
Show Gist options
  • Save Alouush/b9607647215533393e8022cb2c64455b to your computer and use it in GitHub Desktop.
Save Alouush/b9607647215533393e8022cb2c64455b to your computer and use it in GitHub Desktop.
Android App - Basic calculator
package com.woplandia.calc;
import java.util.HashSet;
import java.util.Set;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Default extends Activity {
private TextView result;
private String operand;
private String operator;
private Set<String> numbers;
private Set<String> operators;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
result = (TextView) findViewById(R.id.result);
}
/**
* Initialization of set of number values.
*/
private void initNumbers() {
numbers = new HashSet<String>();
for (int i = 0; i < 10; i++) {
numbers.add(Integer.toString(i));
}
}
/**
* Initialization of set of operators.
*/
private void initOperators() {
operators = new HashSet<String>();
String[] ops = { "+", "-", "*", "/" };
for (String operator : ops) {
operators.add(operator);
}
}
/**
* Button click event handler.
*
* @param view clicked button
* @return void
*/
public void handleClick(View view) {
Button clicked = (Button) view;
String label = clicked.getText().toString();
String display = result.getText().toString();
if (isClear(label)) {
result.setText(R.string.result_default);
} else if (isNumerical(label)) {
if (isDefaultResult(display) || isOperator(display)) {
result.setText(label);
} else {
result.setText(display + label);
}
} else if (isOperator(label)) {
operator = label;
operand = display;
result.setText(label);
} else if (label.equals("=")) {
double a, b, c;
if (operator == null || operand == null) {
return;
}
try {
a = Double.parseDouble(operand);
b = Double.parseDouble(display);
}
catch (Exception e) {
System.out.println(e.getMessage());
return;
}
if (operator.equals("+")) {
c = a + b;
} else if (operator.equals("-")) {
c = a - b;
} else if (operator.equals("*")) {
c = a * b;
} else {
c = a / b;
}
operand = Double.toString(c);
result.setText(operand);
}
}
/**
* Test if value is the same as clear button's.
*
* @param value button value
* @return true if button is clear button
*/
private boolean isClear(String value) {
return value.equals(getString(R.string.buttonClear));
}
/**
* Test if value is operator.
*
* @param value
* button value
* @return true if value is operator
*/
private boolean isOperator(String value) {
if (operators == null) {
initOperators();
}
return operators.contains(value);
}
/**
* Test if result was modified.
*
* @param value result value
* @return true if result is default
*/
private boolean isDefaultResult(String value) {
return value.equals(getString(R.string.result_default));
}
/**
* Test if value is numerical.
*
* @param value button's value
* @return true if value is numerical
*/
private boolean isNumerical(String value) {
if (numbers == null) {
initNumbers();
}
return numbers.contains(value);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout
android:id="@+id/tableLayout1"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView
android:id="@+id/result"
android:layout_height="25pt"
android:textSize="14pt"
android:padding="4pt"
android:gravity="right"
android:text="@string/result_default"
/>
<View
android:layout_height="2dip"
android:background="#FF909090" />
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginTop="5pt"
android:id="@+id/tableRow2"
android:paddingLeft="4pt"
android:paddingRight="4pt">
<Button
android:text="@string/buttonSeven"
android:textSize="14pt"
android:id="@+id/button7"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonEight"
android:textSize="14pt"
android:id="@+id/button8"
android:layout_height="25pt"
android:layout_width="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonNine"
android:textSize="14pt"
android:id="@+id/button9"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonDivide"
android:textSize="14pt"
android:id="@+id/buttonDivide"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
</TableRow>
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginTop="1pt"
android:id="@+id/tableRow2"
android:paddingLeft="4pt"
android:paddingRight="4pt">
<Button
android:text="@string/buttonFour"
android:textSize="14pt"
android:id="@+id/button4"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonFive"
android:textSize="14pt"
android:id="@+id/button5"
android:layout_height="25pt"
android:layout_width="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonSix"
android:textSize="14pt"
android:id="@+id/button6"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonMutiply"
android:textSize="14pt"
android:id="@+id/buttonMultiply"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
</TableRow>
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginTop="1pt"
android:id="@+id/tableRow2"
android:paddingLeft="4pt"
android:paddingRight="4pt">
<Button
android:text="@string/buttonOne"
android:textSize="14pt"
android:id="@+id/button1"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonTwo"
android:textSize="14pt"
android:id="@+id/button2"
android:layout_height="25pt"
android:layout_width="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonThree"
android:textSize="14pt"
android:id="@+id/button3"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonMinus"
android:textSize="14pt"
android:id="@+id/buttonMinus"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
</TableRow>
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginTop="1pt"
android:id="@+id/tableRow2"
android:paddingLeft="4pt"
android:paddingRight="4pt">
<Button
android:text="@string/buttonClear"
android:textSize="14pt"
android:id="@+id/buttonClear"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonZero"
android:textSize="14pt"
android:id="@+id/button0"
android:layout_height="25pt"
android:layout_width="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonResult"
android:textSize="14pt"
android:id="@+id/buttonResult"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
<Button
android:text="@string/buttonPlus"
android:textSize="14pt"
android:id="@+id/buttonPlus"
android:layout_width="25pt"
android:layout_height="25pt"
android:layout_weight="1"
android:onClick="handleClick" />
</TableRow>
</TableLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Default!</string>
<string name="app_name">Dummy Calc</string>
<string name="result_default">0</string>
<string name="buttonPlus">+</string>
<string name="buttonMinus">-</string>
<string name="buttonMutiply">*</string>
<string name="buttonDivide">/</string>
<string name="buttonClear">C</string>
<string name="buttonResult">=</string>
<string name="buttonZero">0</string>
<string name="buttonOne">1</string>
<string name="buttonTwo">2</string>
<string name="buttonThree">3</string>
<string name="buttonFour">4</string>
<string name="buttonFive">5</string>
<string name="buttonSix">6</string>
<string name="buttonSeven">7</string>
<string name="buttonEight">8</string>
<string name="buttonNine">9</string>
</resources>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment