天天看點

圖書查找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用法不一樣吧,不甚了解。

有明白其中差別的,能解釋下嗎?一起探讨,共同進步。