为什么我使用 "for-each loop" 的线性搜索代码不适用于混合输入?
Why is my code of Linear search using "for-each loop" not working for mixed inputs?
我的代码适用于升序或降序数组输入,如 11,12,13,14,15
等....但它不适用于混合顺序数组输入,如 11 13 12 15 14
.
import java.util.Scanner;
public class LinearSearch {
public static void main(String[] args) {
int LS[]=new int[100]; //LS is the array
int n,key,flag=0; //n is the number of array elements and key is the element to be searched
Scanner sc=new Scanner(System.in);
System.out.println("Enter no.of array elements");
n=sc.nextInt();
System.out.println("Enter array elements");
for(int i=0;i<n;i++)
LS[i]=sc.nextInt();
System.out.println("Enter element to search");
key=sc.nextInt();
for (int i:LS){
if(LS[i]==key){
flag=1;
System.out.println(key+" is found at location "+(i+1));
}
}
if(flag==0){
System.out.println(key+" is not found");
}
}
}
我认为问题出在这里:if(LS[i]==key)
您需要更改为 if(i==key)
因为根据 for 循环 for (int i:LS)
i
代表数组的元素而不是指数.
如果要获取元素的索引,可以使用for
循环代替foreach
循环:
for(int i = 0; i<LS.length; i++) {
if(LS[i]==key){
flag=1;
System.out.println(key+" is found at location "+(i+1));
}
}
还有一件事:
您要求的是元素的数量,因此最好使用 n
而不是 100
来初始化数组:
int LS[] = new int[n];
初始化数组时,它会根据大小分配内存。想想n
等于20
,那么初始化大小为100
的数组就有点浪费了
否则,如果用户输入的值大于 100,程序将抛出 ArrayIndexOutOfBoundsException
。
我的代码适用于升序或降序数组输入,如 11,12,13,14,15
等....但它不适用于混合顺序数组输入,如 11 13 12 15 14
.
import java.util.Scanner;
public class LinearSearch {
public static void main(String[] args) {
int LS[]=new int[100]; //LS is the array
int n,key,flag=0; //n is the number of array elements and key is the element to be searched
Scanner sc=new Scanner(System.in);
System.out.println("Enter no.of array elements");
n=sc.nextInt();
System.out.println("Enter array elements");
for(int i=0;i<n;i++)
LS[i]=sc.nextInt();
System.out.println("Enter element to search");
key=sc.nextInt();
for (int i:LS){
if(LS[i]==key){
flag=1;
System.out.println(key+" is found at location "+(i+1));
}
}
if(flag==0){
System.out.println(key+" is not found");
}
}
}
我认为问题出在这里:if(LS[i]==key)
您需要更改为 if(i==key)
因为根据 for 循环 for (int i:LS)
i
代表数组的元素而不是指数.
如果要获取元素的索引,可以使用for
循环代替foreach
循环:
for(int i = 0; i<LS.length; i++) {
if(LS[i]==key){
flag=1;
System.out.println(key+" is found at location "+(i+1));
}
}
还有一件事:
您要求的是元素的数量,因此最好使用 n
而不是 100
来初始化数组:
int LS[] = new int[n];
初始化数组时,它会根据大小分配内存。想想n
等于20
,那么初始化大小为100
否则,如果用户输入的值大于 100,程序将抛出 ArrayIndexOutOfBoundsException
。