查找中最简单的是遍历查找,但同时也是很麻烦的,从头至尾,挨个查找。
遍历查找的时候,可以设一个下标不正确的数,最好使用负数,因为数组中正确的下标是从0开始到1结束,所以定义负数是比较正确的选择。
我想在一个数组中找到一个数字,比如5,可以定义一个index,后面的函数中的参数,可以用arr表示数组,5表示要查找的数。如:
int index = findNumber(arr, 5);
代码如下:
import java.util.Scanner;
class NormalSearch {
public static void main(String[] args) {
int[] arr = new int[10];//定义数组
boolean ret = getNumFromStdin(arr);//getNumFromStdin是布尔型,有返回值,从屏幕上获取数字作为数组的元素,再次获得了10个元素,并且用布尔型为下面的查找数字做判断
if (ret) {
int index = findNumber(arr, 5);//找数组里元素是5
if (index >= 0) {//index在下面定义为-1,若是没有找到index值不会改变,此处就会执行not found
System.out.println("5 at " + index);
} else {
System.out.println("Not Found!");
}
}
}
//需求:从一个数组中找到用户输入的数所在下标
/**
功能:从给定的数组中找到find
参数: int[] arr 要查询的数组
int find 给定要查找的数
返回值: int 类型, 找到返回 有效下标 如果没有找到返回 -1
如果参数 有误 返回 -2
*/
public static int findNumber(int[] arr, int find) {
//参数合法性判断
if (arr == null || arr.length == 0) {
System.out.println("Input Param is invalid!");
return -2; //表示函数运行失败
}
int index = -1; //0 ~ 9是合理的下标
//利用循环遍历查找
for (int i = 0; i < arr.length; i++) {
if (find == arr[i]) {
index = i;//将得到的i值赋给index,作为找到的数字传递出去
break; //跳出循环,已经找到了对应值下标
}
}
return index;//返回数值
}
public static boolean getNumFromStdin(int[] array) {
//参数合法性判断
if (array == null || array.length == 0) {
System.out.println("Input Param is invalid!");
return false; //表示函数运行失败
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入" + array.length + "个数:");
for (int i = 0; i < array.length; i++) {
array[i] = sc.nextInt();//将屏幕上得到的数字一一赋值给数组。
}
return true;
}
public static void printArray(int[] array) {
//参数合法性判断
if (array == null || array.length == 0) {
System.out.println("Input Param is invalid!");
return; //传入参数不合法,结束函数运行
}
//利用for循环打印数组
for (int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] = " + array[i]);
}
//这里可以不用写return 因为函数没有返回值
}
}
步骤:
1.定义数组
2.先进行找到数值的函数书写,利用遍历查找。遍历查找就是一一对比,设定一个不正确的值,若找到则进行更改。
3.获得数组的字符的操作。从屏幕上获取数字的Scanner。利用布尔类型传递真假。
4.打印数组的操作,利用for循环,一一打印
5.对获取数字的操作进行接收,boolean判断,为下一步的找到数字的函数调用做准备。
6.利用上面获取数组的操作,判断是否找到
7.找到进行打印输出。
最后的5,6,7其实是一个嵌套的过程。当屏幕上获取数字是正确的时候,if的值为true,进行查找,当可以查找到的时候,在进行打印输出。