5-2-2 遍历数组-线性搜索-for-each循环

在一堆数中找到某存在的数

是否存在并指出位置(老师的):

import java.util.Scanner;

public class Main {

   public static void main(String[] args) {

	   Scanner in = new Scanner(System.in);
	   	  
	   int[] data = {3,2,5,7,4,9,11,34,12,28};	   	   
	   int x = in.nextInt();
	   int loc = -1;
	   
	   for ( int i = 0; i < data.length; i++)
	   {
		   if (x == data[i])
		   {
			   loc = i ;
			   break;
		   }		   		   		   
	   }
	   if ( loc > -1 )
	   {
//		   (loc+1)使+不做字符串链接,做加法运算
		   System.out.println(x+"是第"+ (loc+1)+"个");		   
	   }
	   else
	   {
		   System.out.println(x+"不在其中");
	   }
	   

       }
}

留意:

1.这样比自己写的多一个提示是第几个的功能

	   int loc = -1;
			   loc = i ;
	   if ( loc > -1 )


2.括号的作用

//		   (loc+1)使+不做字符串链接,做加法运算
		   System.out.println(x+"是第"+ (loc+1)+"个");	

线性搜索缺点:

3.效率不高,以后再讲


4.遍历数组通常使用for循环,i是最大有效下标

for ( int i = 0; i < data.length; i++)
	   {
		   if (x == data[i])
		   {
			   loc = i ;
			   break;
		   }		  

5.常见错误

1.循环结束条件写成<=数组长度

2.离开循环后用i值做数组元素下标




如果只需要知道是否存在,不需要位置(自己写的):

import java.util.Scanner;

public class Main {

   public static void main(String[] args) {

	   Scanner in = new Scanner(System.in);
	   	  
	   int[] data = {3,2,5,7,4,9,11,34,12,28};
	   	   
	   int number = in.nextInt();
	   boolean a = true;
	   
	   for ( int i = 0; i < data.length; i++)
	   {
		   if (number == data[i])
		   {
			   System.out.println("存在");
			   a = false;
			   
		   }		   		   		   
	   }
	   if (a)
	   {
		   System.out.println("不存在");
	   }
	   
	   

       }
}

个人感悟:

1.想要表达——如果没做.....就做........

	   boolean a = true;
			   a = false;
	   if (a)
	   {
		   
	   }





引入for-each循环——遍历数组的好方法

形式:

for(类型 变量 : 数组 )

{

}


例:对于数组data的每一个元素,循环的每一轮提取出来,变成k

	for ( int k : data )


相比较,以前的写法:

<span style="white-space:pre">	</span>for ( int i = 0; i < data.length; i++)


老师的程序:

import java.util.Scanner;

public class Main {

   public static void main(String[] args) {

	   Scanner in = new Scanner(System.in);
	   	  
	   int[] data = {3,2,5,7,4,9,11,34,12,28};	   	   
	   int x = in.nextInt();
	   boolean found = false;
	   
//	   对于数组data的每一个元素,循环的每一轮提取出来,变成k
	   for ( int k : data )
	   {
		   if ( k == x)
		   {
			   found = true;
			   break;
		   }
	   }
	   
	   if ( found )
	   {

		   System.out.println(x+"在其中");		   
	   }
	   else
	   {
		   System.out.println(x+"不在其中");
	   }
	   

       }
}


两种程序不同的地方:

1.能指出第几个的:

	   int loc = -1;
	   
	   for ( int i = 0; i < data.length; i++)
	   {
		   if (x == data[i])
		   {
			   loc = i ;
			   break;
		   }		   		   		   
	   }
	   if ( loc > -1 )
	   {
//		   (loc+1)使+不做字符串链接,做加法运算
		   System.out.println(x+"是第"+ (loc+1)+"个");		   
	   }


2.指出是否存在的:

	   boolean found = false;
	   
	   for ( int k : data )
	   {
		   if ( k == x)
		   {
			   found = true;
			   break;
		   }
	   }
	   
	   if ( found )
	   {
		   System.out.println(x+"在其中");		   
	   }






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值