在java中,我们常用的查找有两种:
1.顺序查找 SeqSearch.java
2.二分查找(这里只提供思路)
案例:有一个数列:白眉鹰王,金毛狮王,紫衫龙王,青翼蝠王 猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称[顺序查找]要求:如果找到,就提示找到,并且给出下标值
(下面我自己写的,后来感觉这方法很笨)
java
import java.util.Scanner;
public class arraySearch{
public static void main(String args[]){
//有一个数列:白眉鹰王,金毛狮王,紫衫龙王,青翼蝠王 猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称[顺序查找]要求:如果找到,就提示找到,并且给出下标值
String wordarr[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入要猜的名称");
String key = myScanner.next();
switch(key){
case("白眉鹰王"): {
for (int i = 0; i < wordarr.length; i++) {
if (wordarr[i].equals(key)) {
System.out.println(key + " 的下标是: " + i);
break;
}
}
}
break;
case("金毛狮王"): {
for (int i = 0; i < wordarr.length; i++) {
if (wordarr[i].equals(key)) {
System.out.println(key + " 的下标是: " + i);
break;
}
}
}
break;
case("紫衫龙王"): {
for (int i = 0; i < wordarr.length; i++) {
if (wordarr[i].equals(key)) {
System.out.println(key + " 的下标是: " + i);
break;
}
}
}
break;
case("青翼蝠王"): {
for (int i = 0; i < wordarr.length; i++) {
if (wordarr[i].equals(key)) {
System.out.println(key + " 的下标是: " + i);
break;
}
}
}
break;
default:
System.out.println("输入有误,程序退出");
}
}
}
更聪明的方法:
java
import java.util.Scanner;
public class SeqSearch {
public static void main(String args[]) {
//有一个数列:白眉鹰王,金毛狮王,紫衫龙王,青翼蝠王 猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称[顺序查找]要求:如果找到,就提示找到,并且给出下标值
String names[] = {"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"};
int index = -1;//定义一个索引变量,如果下面的if语句执行成功,则index不再等于-1,就不会弹出"没找到"
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入名称");
String findName = myScanner.next();
for(int i = 0;i < names.length;i++)
{
//比较字符串equals
if(findName.equals(names[i]))
{
System.out.println("找到了,下标值是" + i);
index = i;//如果找到了数组中相等的语句就改变index的值,使其不会弹出"没找到"
break;
}
}
if(index == -1)
System.out.println("没找到");
}
}
二分查找(仅提供思想不提供代码):
请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"
首先,二分查找要求提供的数组是有序的,以上面的数组为例,首先会将输入的数字与数组中间的数比对,如果输入的数大于中间的数则往它右边继续查找,反之则往左边查找