Code Review Asked by the on January 16, 2021
I’m pretty new to programming and made a few programs so far. I recently made a Calculator program and I hope you guys could tell me what I could do to improve.
int firstNumber;
string sign;
int secondNumber;
int answer;
Console.WriteLine("Input Number:");
firstNumber = Convert.ToInt32(Console.ReadLine());
Console.Clear();
Console.WriteLine("Input Sign:");
sign = Console.ReadLine();
Console.Clear();
Console.WriteLine("Input Second Number:");
secondNumber = Convert.ToInt32(Console.ReadLine());
Console.Clear();
switch (sign)
{
case "+":
answer = firstNumber + secondNumber;
Console.WriteLine(answer);
Console.ReadKey();
break;
case "-":
answer = firstNumber - secondNumber;
Console.WriteLine(answer);
Console.ReadKey();
break;
case "*":
answer = firstNumber * secondNumber;
Console.WriteLine(answer);
Console.ReadKey();
break;
case "/":
answer = firstNumber / secondNumber;
Console.WriteLine(answer);
Console.ReadKey();
break;
default:
Console.WriteLine("Invalid Input");
break;
}
Whenever you try to implement an application try to use sentences to describe the desired behavior. After that ask yourself: "Can it be further refined?" If so, then write new sentences to detail your plan in a more fine-grained level.
Let me show you what I mean:
The application can perform basic operations between two operands.
What can be further refined?
The application can perform basic operations between two operands.
It allows addition, subtraction, multiplication and division.
User can provide two numbers and the desired operation.
The application will perform it on the user's behalf.
What can be further refined?
The application can perform basic operations between two operands.
It allows addition, subtraction, multiplication and division.
User can provide two numbers and the desired operation.
The application receives an input from the user then it perform a preliminary check.
If it is valid then it goes to the next statement.
If it is invalid then it ask the user again to provide a valid input.
The application will perform it on the user's behalf.
Now, we can translate each sentence into instructions.
This problem decomposition also helps us to well-organize our code:
///<summary>
/// The application can perform basic operations between two operands.
///</summary>
public static void Main()
{
}
///<summary>
/// User can provide two numbers and the desired operation.
///</summary>
private static void AskForInputs()
{
}
///<summary>
/// The application receives an input from the user then it perform a preliminary check.
/// <list type="bullet">
/// <item>
/// <description>If it is valid then it goes to the next statement.</description>
/// </item>
/// <item>
/// <description>If it is invalid then it ask the user again to provide a valid input.</description>
/// </item>
/// </list>
///</summary>
///</summary>
private static int AskForNumber()
{
}
///<summary>
/// The application receives an input from the user then it perform a preliminary check. <para />
/// It allows addition, subtraction, multiplication and division.
///</summary>
private static char AskForOperation()
{
}
///<summary>
/// The application will perform it on the users behalf.
///</summary>
private static void PerformRequestedOperation()
{
}
The implementation is bit naive, because:
3
(s)he provides three
int.MaxValue + 100
100 / 0
10 / 3
In your switch
statement you repeat the following two statement in each case
:
Console.WriteLine(answer);
Console.ReadKey();
An alternative implementation could be:
switch (operation)
{
case "+":
answer = firstNumber + secondNumber;
break;
case "-":
answer = firstNumber - secondNumber;
break;
case "*":
answer = firstNumber * secondNumber;
break;
case "/":
answer = firstNumber / secondNumber;
break;
}
Console.WriteLine(answer);
Console.ReadKey();
This can be easily enhanced to include all the above validations as well:
switch (operation)
{
case "+":
answer = PerformAddition(lhs, rhs);
break;
case "-":
answer = PerformSubtraction(lhs, rhs);
break;
case "*":
answer = PerformMultiplication(lhs, rhs);
break;
case "/":
answer = PerformDivision(lhs, rhs);
break;
}
Console.WriteLine(answer);
Console.ReadKey();
Now as you can see we have introduced 4 new functions to abstract away the complexity to deal with different edge cases and the main flow remained easy to follow.
Answered by Peter Csala on January 16, 2021
An excellent attempt to writing your Calculator, I find the variable names and syntax following well accepted conventions for nomenclature in C#
One suggestion: anticipate invalid inputs from user. I would recommend using int.TryParse
in place of Convert.ToInt32()
.
Answered by kanchirk on January 16, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP