У меня есть массив на С#, который генерирует случайный массив длины 5. Я уже объявил этот способ
int[] array = new int[5]
Я должен искать массив, открывается диалоговое окно ввода, и я ввожу любое значение. Предполагается, что он выдаст мне вывод, если число найдено, иначе дисплей не найден, и будет продолжаться до тех пор, пока я не введу правильный номер.
У меня есть этот код, что-то вроде этого, он дает мне некоторые значения, которые мне не нужны. Как я могу реализовать такое, чтобы оно удовлетворяло моему условию? Заранее спасибо.
private void btnSearch_Click(object sender, EventArgs e)
{
//use InputBox dialog to input a value.
//Search for the value in the array.
//If found, display "Found!", otherwise
//display "Not found!" when there is no match.
for (int i = 0; i < array.Length; i++)
{
InputBox inputDlg = new InputBox("Search for array value " + (i + 1));
if (inputDlg.ShowDialog() == DialogResult.OK)
{
if (array[i] == Array.IndexOf(array, 5))
{
array[i] = Convert.ToInt32(inputDlg.Input);
}
tbxOutput.AppendText("Value found: " + array[i] + Environment.NewLine);
}
else
{
tbxOutput.AppendText("Value not found" + Environment.NewLine);
}
}
Да, он возвращает значения массива, но я ничего не вводил во входные данные, просто полностью нажал «ОК»... приведенное выше утверждение работает.





Если я правильно понимаю, у вас есть 1 массив с 5 значениями, и вы хотите проверить, содержит ли он заданное значение. Это правильно?
Если да, вам нужно пройтись по массиву и отметить логическое значение true, если вы его найдете:
private void btnSearch_Click(object sender, EventArgs e) {
// loop until you call break
while(true) {
// ask for a value
InputBox inputDlg = new InputBox("Search for array value " + (i + 1));
try {
int value = Convert.ToInt32(inputDlg.Input);
// Check if value is in the array and display the appropriate message
if (isInArray(array, value)) {
tbxOutput.AppendText("Value found: " + value + Environment.NewLine);
// break to exit from the while loop
break;
} else {
tbxOutput.AppendText("Value not found" + Environment.NewLine);
}
} catch (OverflowException) {
tbxOutput.AppendText("OverflowException parsing input to int" + Environment.NewLine);
} catch (FormatException) {
tbxOutput.AppendText("FormatException parsing input to int" + Environment.NewLine);
}
}
}
Метод isInArray:
// this method returns true if the given value is in the array
private static boolean isInArray(int[] array, int valueToFind) {
boolean found = false;
int currentValue;
for (int i = 0; i < array.Length; i++) {
currentValue = array[i];
if (currentValue == valueToFind) {
found = true;
break;
}
}
return found;
}
да. Но перед этим открывается диалоговое окно с просьбой ввести число. Если все в порядке, он будет отображаться как найденный, в противном случае продолжайте цикл, пока не будет найден правильный номер. Я использую приложения Windows Forms вместо консоли Windows. (inputDlg.ShowDialog() == DialogResult.OK)
@Ralph Я отредактировал свой ответ, включив в него цикл и диалоговые окна.
В for есть петля isInArray. Для другого цикла вы не можете использовать цикл for, если только вы не хотите иметь ограниченное количество попыток. while — единственный способ продолжать спрашивать, пока не будет введено правильное значение.
@Ralph Я отредактировал свой ответ, теперь у вас есть точная строка в методе isInArray
@ Ральф, на каком языке ты говоришь? это Java или C# или что-то еще?
С#. Спасибо, теперь это имеет больше смысла, но эта строка, похоже, дает исключение, следует ли добавить обработчик исключений? значение int = Convert.ToInt32 (inputDlg.Input);
@Ralph Я добавил попытку/поймать, вероятно, это сработает. Пожалуйста, проголосуйте и примите мой ответ, если он вам помог.
Convert.ToInt32(inputDlg.Input)возвращает вам значение, которое вам нужно искать в массиве?