Java - Поиск элемента в случайном массиве
Я выполнил следующий код:
import java.util.Scanner;
public class Linear_Search {
public static void main(String[] args) {
int arr[] = new int[20];
for(int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 10) + 1;
}
System.out.print("Array is: ");
for(int i : arr)
System.out.print(arr[i] + " ");
//int arr[]= {1,2,4,5,6,7,8,43,6,4,2,6,8,3};
System.out.println();
System.out.println("Enter the number you want to search");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
boolean found = false;
String indices = "";
for(int i = 0; i < arr.length; i++) {
if(num == arr[i]) {
found = true;
indices = indices + i + ", ";
}
}
if(found == false) {
System.out.println(num + " does not exist");
}
else {
System.out.println(num + " found at index: " + indices.substring(0, indices.length() - 2));
}
sc.close();
}
}
Выход:
Array is: 3 3 1 2 8 1 2 2 3 1 3 3 7 1 7 3 1 3 8 3
Enter the number you want to search
2
2 found at index: 0, 1, 8 ,15
Почему это отображает случайные индексы в качестве ответов. Код работает нормально, когда я использую пользовательский массив, подобный тому, который прокомментирован в коде. Это связано с явным приведением к Math.random() или чем-то еще?
1 ответ
Решение
Вас вводит в заблуждение цикл печати массива, который на самом деле не печатает элементы массива.
Изменить:
for(int i : arr)
System.out.print(arr[i] + " ");
чтобы:
for(int i : arr)
System.out.print(i + " ");
и вы увидите фактические значения массива.
Когда вы перебираете массив с расширенным циклом for, вы перебираете значения массива, а не индексы массива.