继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

charsandrew
关注TA
已关注
手记 4
粉丝 13
获赞 148

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

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<books.length;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<books.length){
                    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用法不一样吧,不甚了解。
有明白其中区别的,能解释下吗?一起探讨,共同进步。

打开App,阅读手记
9人推荐
发表评论
随时随地看视频慕课网APP

热门评论

这里也是if(0<=bookNum&&bookNum<books.length){ system.out.println("book:"+books[booknum]);="" flag="false;" }else{="" system.out.println("图书不存在!");="" }="" break;应该把break放在if语句里面,flag="false";的后面吧

我还有一个问题if(flag==true){ System.out.println("图书没找到"); } break;这里的break不应该写吧,这样无论图书找没找到都跳出了while,那你while循环不是白写了?




我道歉,while和if那里是我学得不够深,对不起!

查看全部评论