剛看了下功能還以為很簡單,結果寫了很久還沒寫出來,感覺比第二季結束那個習題還難寫。
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用法不一樣吧,不甚了解。
有明白其中差別的,能解釋下嗎?一起探讨,共同進步。