Reputation:
I want the input type to be int e.g. int number, instead of string and then parsing. So when I try to parse the InputNumber
int.Parse(InputNumber.Text)
I get error that Input string was not in a correct format.
It works but whenever I press Backspace to delete the number, my project crashes.
As I said I've tried to parse the Input as int.
int.Parse(InputNumber.Text)
So if I could use int my method would be much shorter and easier to understand.
private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
{
string number = InputNumber.Text;
bool isEvenOdd = EvenOddChecker.IsEvenOdd(number);
OutputNumber.Text = number + (isEvenOdd ? " is a even number" : " is a odd number");
if (InputNumber.Text == string.Empty)
{
OutputNumber.Clear();
}
}
public static bool IsEvenOdd(string number)
{
List<string> even = new List<string>()
{
"0","2","4","6","8"
};
foreach (var e in even)
{
if (number.Substring(0, number.Length - 1).ToString() == e)
{
return true;
}
}
return false;
}
I expect the output 2 to be an even number, but the actual output is that's an odd number.
Or e.g. 3 should be an odd number, it says it's even.
Upvotes: 3
Views: 136
Reputation: 7213
You can use int.TryParse()
to avoid exception:
private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
{
string number = InputNumber.Text;
if(int.TryParse(number, out int value))
{
bool isEven = value % 2 == 0;
OutputNumber.Text = number + (isEven ? " is an even number" : " is an odd number");
if (InputNumber.Text == string.Empty)
{
OutputNumber.Clear();
}
}
}
and then by doing yourIntValue % 2 == 0
you can check if your number is even or odd.
Upvotes: 0
Reputation: 16059
You can simply code by using int.TryParse()
, something like
private void InputNumber_TextChanged(object sender, TextChangedEventArgs e)
{
if(int.TryParse(InputNumber.Text, out int number))
{
OutputNumber.Text = number + (number % 2 == 0? " is an even number" : " is an odd number");
//No need to write entire function we have modulo to check even odd
}
if (InputNumber.Text == string.Empty)
{
OutputNumber.Clear();
}
}
Upvotes: 2
Reputation: 37337
First of all, you are using wrong event IMO. You want to validate the number after it is entered, not WHILE it is entered. Your event you have subscriebed is fired on every change in text in a textbox.
So I'd if
checking if, for example, enter button was pressed, then I'd allow code to run, but this can be checked in KeyUp
event, something like this:
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter) return;
// your validation
}
In that handler you can check and try parse the number, because you are SURE that the number is entered and the user wants that number to be entered by pressing Enter button (after parsing you just need to check if number % 2
equals to zero).
Also your method IsEvenOdd
can be simplified to:
even.Contains(number);
which will return true, if number is in a list, false otherwise.
Upvotes: 0
Reputation: 709
This should do the trick:
I used int.TryParse
to catch all errors of "faulty" inputs.
private void InputNumber_TextChanged (object sender, TextChangedEventArgs e)
{
string numberString = InputNumber.Text;
if (!int.TryParse(numberString, out int number))
{
OutputNumber.Clear();
return;
}
bool isEven = EvenOddChecker.IsEven(number);
OutputNumber.Text = number + (isEven ? " is an even number" : " is an odd number");
if (InputNumber.Text == string.Empty)
{
OutputNumber.Clear();
}
}
To check if the number is even this should be the fastest way:
public static bool IsEven (int number) => number % 2 == 0;
Upvotes: 0