天天看点

图书查找java_java第三季第一集之:查找图书信息实现

刚看了下功能还以为很简单,结果写了很久还没写出来,感觉比第二季结束那个习题还难写。

package learn.java;

import java.util.*;

public class CheckBook {

//1. 将图书信息存入静态字符串数组中,定义一个静态变量flag,便于控制循环和跳出循环

private static String[] books={"高数","数据结构","硅谷之火","浪潮之巅","知乎精选"};

private static boolean flag=true;

//2. 与用户交互,如果输入不是1或2,则重复输入循环,如果输入1,调用searchName()方法,输入2,调用searchNum()方法

public static void main(String[] args){

CheckBook sc=new CheckBook();

while(flag){

try{

System.out.println("输入命令查找图书:1-按书名,2-按序号");

Scanner input=new Scanner(System.in);

int num=input.nextInt();

//输入1,按书名查询,输入2,按序号名查询

switch(num){

case 1:sc.searchName();break;

case 2:sc.searchNum();break;

}

}catch(InputMismatchException e){

System.out.println("命令输入错误,请根据提示重新输入命令!");

}

}

}

//3.写出searchName()方法,如果输入类型错误,一直循环输入,如果输入类型正确,查找图书

//遍历数组查找图书,如果找到,打印图书信息,修改flag值为false,如果找不到,打印找不到信息,不修改flag

public void searchName(){

while(true){

try{

System.out.println("输入图书名称:");

Scanner input=new Scanner(System.in);

String bookName=input.next();

//遍历查找匹配图书信息

for(int i=0;i

//这里使用了equals来判断是否相等,之前使用 ==,结果无论如何也找不到。大概二者用法不同

if(books[i].equals(bookName)){

System.out.println("book:"+books[i]);

flag=false;

break;

}

}

//flag值没变,表明图书没找到

if(flag==true){

System.out.println("图书没找到");

}

break;

}catch(InputMismatchException e){

System.out.println("命令输入错误,请根据提示输入命令");

}

}

}

//4. 写出searchNum()方法,按序号查找图书,这里默认了图书序号就是该书在数组中的索引

public void searchNum(){

while(true){

try{

System.out.println("输入图书序号:");

Scanner input=new Scanner(System.in);

int bookNum=input.nextInt();

if(0<=bookNum&&bookNum

System.out.println("book:"+books[bookNum]);

flag=false;

}else{

System.out.println("图书不存在!");

}

break;

}catch(InputMismatchException e){

System.out.println("命令输入错误,请根据提示输入命令");

}

}

}

}

代码中遍历数组查找图书那里,刚开始写的是if(bookName==books[i]),结果无论如何也查找不出相应的图书,改成bookName.equals(books[i])

就能找到,大概是==和equals用法不一样吧,不甚了解。

有明白其中区别的,能解释下吗?一起探讨,共同进步。