Skip to content

Commit a89f166

Browse files
committed
Handle errors: division by 0 fix for +/- NaN
1 parent ebc03b2 commit a89f166

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

app/src/main/java/com/example/kalkulator/activities/AdvancedCalculatorActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public void percentOnClick(View v)
129129

130130
String formattedOutput = DECIMAL_FORMAT.format(result).replace('.', ',');
131131

132-
if (formattedOutput.equals(INFINITY_SYMBOL))
132+
if (formattedOutput.equals(INFINITY_SYMBOL) || formattedOutput.equals(MINUS_NAN) || formattedOutput.equals(NAN))
133133
{
134134
Toast.makeText(this, "Cannot divide by 0", Toast.LENGTH_SHORT).show();
135135
}

app/src/main/java/com/example/kalkulator/activities/SimpleCalculatorActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void equalsOnClick(View v)
149149

150150
String formattedOutput = DECIMAL_FORMAT.format(result).replace('.', ',');
151151

152-
if (formattedOutput.equals(INFINITY_SYMBOL))
152+
if (formattedOutput.equals(INFINITY_SYMBOL) || formattedOutput.equals(MINUS_NAN) || formattedOutput.equals(NAN))
153153
{
154154
Toast.makeText(this, "Cannot divide by 0", Toast.LENGTH_SHORT).show();
155155
}

app/src/main/java/com/example/kalkulator/listeners/OperationOnClickListener.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.kalkulator.listeners;
22

33
import android.view.View;
4+
import android.widget.Toast;
45
import com.example.kalkulator.utils.CalculatorHandler;
56

67
import static com.example.kalkulator.utils.CalculatorHandler.*;
@@ -22,6 +23,7 @@ public void onClick(View v)
2223
double prevValue;
2324
double currValue = Double.parseDouble(valueTextView.getText().toString().replace(',', '.'));
2425
boolean outputTooLong;
26+
boolean operationChange = true;
2527

2628
if (operationTextView.getText().toString().isEmpty())
2729
{
@@ -36,14 +38,22 @@ public void onClick(View v)
3638
formattedOutput = DECIMAL_FORMAT.format(result).replace('.', ',');
3739
outputTooLong = CalculatorHandler.isOutputTooLong(formattedOutput);
3840

39-
if (!outputTooLong)
41+
if (formattedOutput.equals(INFINITY_SYMBOL) || formattedOutput.equals(MINUS_NAN) || formattedOutput.equals(NAN))
42+
{
43+
Toast.makeText(getToastMessageContext(), "Cannot divide by 0", Toast.LENGTH_SHORT).show();
44+
operationChange = false;
45+
}
46+
else if (!outputTooLong)
4047
{
4148
prevValueTextView.setText(formattedOutput);
4249
}
4350
}
4451

45-
operationTextView.setText(String.valueOf(operation));
46-
newValueFlag = true;
52+
if (operationChange)
53+
{
54+
operationTextView.setText(String.valueOf(operation));
55+
newValueFlag = true;
56+
}
4757

4858
makeStandardVibration();
4959
}

app/src/main/java/com/example/kalkulator/utils/CalculatorHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public class CalculatorHandler
1616
public static final char CHAR_DIVIDE = '÷';
1717
public static final char CHAR_POWER = '^';
1818
public static final String INFINITY_SYMBOL = "\u221E"; // infinity symbol (dividing by zero)
19+
public static final String MINUS_NAN = "-NaN";
20+
public static final String NAN = "NaN";
1921
public static final int VALUE_TEXT_VIEW_MAX_SIZE = 10;
2022
public static final int OUTPUT_MAX_SIZE = 20;
2123
public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##########");
@@ -82,4 +84,9 @@ public static boolean isOutputTooLong(String formattedOutput)
8284

8385
return outputTooLong;
8486
}
87+
88+
public static Context getToastMessageContext()
89+
{
90+
return toastMessageContext;
91+
}
8592
}

0 commit comments

Comments
 (0)