为啥我的使用“for-each 循环”的线性搜索代码不适用于混合输入?

Posted

技术标签:

【中文标题】为啥我的使用“for-each 循环”的线性搜索代码不适用于混合输入?【英文标题】:Why is my code of Linear search using "for-each loop" not working for mixed inputs?为什么我的使用“for-each 循环”的线性搜索代码不适用于混合输入? 【发布时间】:2021-06-11 09:34:09 【问题描述】:

我的代码适用于升序或降序数组输入,如 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 代表数组的元素而不是索引. 【参考方案1】:

我认为问题出在这里: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

【讨论】:

以上是关于为啥我的使用“for-each 循环”的线性搜索代码不适用于混合输入?的主要内容,如果未能解决你的问题,请参考以下文章

For-Each循环Java错误ArrayIndexOutOfBoundsException

为啥我的线性搜索总是返回 false,即使该项目在数组中?

为啥我的线性搜索比我在 Python3 中的二分搜索运行得更快?

For-Each 循环 Java 错误 ArrayIndexOutOfBoundsException

INSERT INTO STATEMENT 在我的 for-each 循环中不起作用

jQuery - 使用“for-each”循环更改循环外的变量