Reputation: 11
I need to implement a Search button that will compare the value from my TextBox
with the values in the arrays and if they match, it returns the index, otherwise it will return -1
. I implemented the random arrays of double
and int
already as well as all the interface and buttons. It is a must to use IComparable
and CompareTo()
but I have no idea on how to implement it. I tried implementing a Search
method, but it is not working, I don't know how to call it in the SearchButton_Click
event handler.
That's what I have so far:
public partial class MainWindow : Window
{
int[] numb = new int[6];
double[] numb2 = new double[6];
public MainWindow ()
{
InitializeComponent ();
}
//Create Int
private void Button_Click (object sender, RoutedEventArgs e)
{
resultsBox.Items.Clear ();
resultsBox.Items.Add ("Index Value\n");
Random rnd = new Random ();
for (int i = 0; i < 6; i++) {
numb[i] = rnd.Next (0, 999);
string m = i.ToString () + "\t" + numb[i].ToString ();
resultsBox.Items.Add (m);
}
}
//Create Double
private void CreateDouble_Click (object sender, RoutedEventArgs e)
{
resultsBox.Items.Clear ();
resultsBox.Items.Add ("Index Value\n");
Random rnd = new Random ();
for (int i = 0; i < 6; i++) {
numb2[i] = Math.Round (rnd.NextDouble () * (999), 2);
string m = i.ToString () + "\t" + numb2[i].ToString ();
resultsBox.Items.Add (m);
}
}
//Search
private void SearchButton_Click (object sender, RoutedEventArgs e) { }
static int Search<T> (T[] dataArray, T searchKey) where T : IComparable<T>
{
//Iterate through the array.
for (int iter = 0; iter < dataArray.Length; iter++) {
//Check if the element is present in the array.
if (dataArray[iter].CompareTo (searchKey) == 0) {
//Return the index if the element is present in the array.
return iter;
}
}
//Otherwise return the index -1.
return -1;
}
}
Thank you!
Upvotes: -3
Views: 260
Reputation: 28948
First you have to give the TextBox
a name, so that you can reference it in your code-behind, in order to retrieve the search key. Then on button clicked, you have to check the numeric type of the search key, to identify the search target array. Then pass both arguments to the Search()
method:
MainWindow.xaml
<Window>
...
<TextBox x:Name="SearchInputBox` />
...
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
private readonly int arraySize = 6;
private int[] IntegerValues { get; }
private double[] DoubleValues { get; }
public MainWindow()
{
InitializeComponent();
this.IntegerValues = new int[arraySize];
this.DoubleValues = new double[arraySize];
}
// Create Int
private void Button_Click(object sender, RoutedEventArgs e)
{
resultsBox.Items.Clear();
resultsBox.Items.Add("Index Value\n");
Random rnd = new Random();
for (int index = 0; index < arraySize; index++)
{
this.IntegerValues[index] = rnd.Next(0, 999);
string item = index.ToString() + "\t" + this.IntegerValues[index].ToString();
resultsBox.Items.Add(item);
}
}
// Create Double
private void CreateDouble_Click(object sender, RoutedEventArgs e)
{
resultsBox.Items.Clear();
resultsBox.Items.Add("Index Value\n");
Random rnd = new Random();
for (int index = 0; index < arraySize; index++)
{
this.DoubleValues[index] = Math.Round(rnd.NextDouble() * 999, 2);
string item = index.ToString() + "\t" + this.DoubleValues[index].ToString();
resultsBox.Items.Add(item);
}
}
// Handle search button clicked
private void SearchButton_Click(object sender, RoutedEventArgs e)
{
string numericString = this.SearchInputBox.Text;
int resultIndex = -1;
if (int.TryParse(numericString, out int integerSearchPredicate)
{
resultIndex = MainWindow.Search(this.IntegerValues, integerSearchPredicate);
}
else if (double.TryParse(numericString, out int doubleSearchPredicate)
{
resultIndex = MainWindow.Search(this.DoubleValues, doubleSearchPredicate);
}
}
static int Search<T>(T[] dataArray, T searchKey) where T : IComparable<T>
{
// Iterate over the array.
for (int index = 0; index < dataArray.Length; index++)
{
// Check if the element is present in the array.
if (dataArray[index].CompareTo(searchKey) == 0)
{
//Return the index if the element is present in the array.
return index;
}
}
// Otherwise return the index -1.
return -1;
}
}
Upvotes: 0