diff --git a/SharpCalculator.Avalonia/MainWindow.axaml b/SharpCalculator.Avalonia/MainWindow.axaml
index 4cd22e8..37cbd60 100644
--- a/SharpCalculator.Avalonia/MainWindow.axaml
+++ b/SharpCalculator.Avalonia/MainWindow.axaml
@@ -35,8 +35,8 @@
-
+
\ No newline at end of file
diff --git a/SharpCalculator.Avalonia/MainWindow.axaml.cs b/SharpCalculator.Avalonia/MainWindow.axaml.cs
index 5b6036a..415a2c5 100644
--- a/SharpCalculator.Avalonia/MainWindow.axaml.cs
+++ b/SharpCalculator.Avalonia/MainWindow.axaml.cs
@@ -10,45 +10,42 @@ public partial class MainWindow : Window
{
public MainWindow()
{
+ _currentOperation = _initialOperation;
InitializeComponent();
}
- private double _rezult;
- private StringBuilder currentNumberB = new();
+ private double _prevNumber;
+ private StringBuilder _currentNumberB = new();
- private double CompleteCurrentNumber()
- {
- var n = double.Parse(currentNumberB.ToString(), CultureInfo.InvariantCulture);
- currentNumberB.Clear();
- return n;
- }
+ private double ParseCurrentNumber() => double.Parse(_currentNumberB.ToString(), CultureInfo.InvariantCulture);
- private void UpdateOutput()
- {
- Output.Text = "= " + _rezult;
- }
-
- private Func prevOperation = (_, firstN) => firstN;
+ readonly Func _initialOperation = (_, firstN) => firstN;
+ private Func _currentOperation;
- private void TryUpdateRezult(Func operation, string text)
+ private void NewOperation(Func operation, string operationText)
{
- if (currentNumberB.Length > 0)
+ // operation replacement
+ if (_currentNumberB.Length == 0)
+ Input.Redo();
+ else
{
- _rezult = prevOperation(_rezult, CompleteCurrentNumber());
- prevOperation = operation;
- Input.Text += " " + text + " ";
+ _prevNumber = _currentOperation( _prevNumber, ParseCurrentNumber());
+ Output.Text = _prevNumber.ToString(CultureInfo.InvariantCulture);
+ _currentNumberB.Clear();
}
-
- UpdateOutput();
+ Input.Text = _prevNumber.ToString(CultureInfo.InvariantCulture) + " " + operationText + " ";
+ _currentOperation = operation;
}
private void NumberButton_OnClick(object? sender, RoutedEventArgs e)
{
if (sender is not Button button)
throw new Exception();
- string text = button.Content?.ToString()!;
+
+ string text = button.Content!.ToString()!;
Input.Text += text;
- currentNumberB.Append(text);
+ _currentNumberB.Append(text);
+ Output.Text = "= " + _currentOperation(_prevNumber, ParseCurrentNumber()).ToString(CultureInfo.InvariantCulture);
}
private void OperationButton_OnClick(object? sender, RoutedEventArgs e)
@@ -59,22 +56,22 @@ public partial class MainWindow : Window
switch (text)
{
case "+":
- TryUpdateRezult((a, b) => a + b, text);
+ NewOperation((a, b) => a + b, text);
break;
case "-":
- TryUpdateRezult((a, b) => a - b, text);
+ NewOperation((a, b) => a - b, text);
break;
case "*":
- TryUpdateRezult((a, b) => a * b, text);
+ NewOperation((a, b) => a * b, text);
break;
case "/":
- TryUpdateRezult((a, b) => a / b, text);
+ NewOperation((a, b) => a / b, text);
break;
case "^":
- TryUpdateRezult(Math.Pow, text);
+ NewOperation(Math.Pow, text);
break;
case "=":
- TryUpdateRezult((a, _) => a, "");
+ NewOperation((_, newNumber) => newNumber, "");
break;
default:
throw new Exception("incorrect button text: " + text);
@@ -83,8 +80,10 @@ public partial class MainWindow : Window
private void ClearButton_OnClick(object? sender, RoutedEventArgs e)
{
- _rezult = 0;
- UpdateOutput();
+ _prevNumber = 0;
+ _currentOperation = _initialOperation;
+ _currentNumberB.Clear();
Input.Text = "";
+ Output.Text = "= 0";
}
}
\ No newline at end of file
diff --git a/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj b/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj
index 8d15fd0..6b8d3a2 100644
--- a/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj
+++ b/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj
@@ -1,8 +1,8 @@
WinExe
- net8.0
- 12
+ net7.0
+ 11
enable
disable
true