Я пытался решить вопрос, который говорит: Проверьте, равняется ли СУММ любые два значения элемента из данного int [] данному значению суммы, верните истину, и ничего не найдено после проверки всех элементов, верните ложь.
Я решил это с помощью nested for..loop легко, как показано ниже:
public bool CheckValue (int[] given, int sum) {
if (given == null) {
return false;
} else if (given.Length == 0 || given.Length == 1) {
return false;
} else {
for (int i = 0; i < given.Length - 1; i++) {
for (int j = i + 1; j < given.Length; j++) {
if ((given[i] + given[j]) == sum) {
return true;
}
}
}
return false;
}
}
Но я хотел решить эту проблему, используя Hashtable для второго цикла, потому что это упростит процесс поиска, и попробовал приведенный ниже код:
private static bool CheckValueUsingHashTable (int[] given, int sum) {
if (given == null) {
return false;
} else if (given.Length == 0 || given.Length == 1) {
return false;
} else {
Hashtable hashs = new Hashtable ();
for (int i = 0; i < given.Length; i++) {
hashs.Add (i, given[i]);
}
for (int j = 0; j < given.Length; j++) {
int valueToAdd = sum - given[j];
if (hashs.ContainsValue (valueToAdd)) {
return true;
}
}
return false;
}
}
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что если заданный массив равен {1,2,3,4}, а заданная сумма равна 2, он может добавить первый элемент вместе с собой и вернуть значение ИСТИНА, но, очевидно,Я не хочу, чтобы это произошло.
Итак, пожалуйста, как мне найти значение в Hashtable и получить ключ. В настоящее время функция возвращает TRUE или FALSE, основываясь на существовании значений.