花了一下午写的借书系统的作业,运行良好。但有两个小问题,希望高手指点一下。

来源:1-9 经验总结

尘中尘27

2015-07-19 20:08

package com.imooc.homework;
import java.util.Scanner;

public class Initial {

	@SuppressWarnings("resource")
	public static void main(String[] args) throws Order,NoExistException{
		// TODO 自动生成的方法存根
		//赋值:"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"
		Book[] books={new Book(1,"C语言"),new Book(2,"数据结构"),new Book(3,"汇编语言"),
				new Book(4,"高数"),new Book(5,"大学语文"),new Book(6,"毛概")				
		};		
		
	while(true){
		//开始查询
		//选择查询方式	
		System.out.println("***输入命令:1-按照名称查找图书;2-按照序号查找图书");
         Scanner input=new Scanner(System.in);
        int seekType;
        try{
        	 seekType=input.nextInt();
        }catch(Exception e){
			System.out.println("命令输入错误!请根据提示输入数字命令!");
			input = new Scanner(System.in);
			continue;
		}//排除输入不为数字的情况
        
        if(seekType==1){
        	//用图书名寻找图书
       
        	System.out.println("输入图书名称:");
        	String j=input.next(); 
        	for(int i=0;i<books.length;i++){	
        		if(j.equals(books[i].getBookName())){
        			System.out.println("book:"+books[i].getBookName());
        			return;
        		}
        	}
        	System.out.println("图书不存在");
        	continue;
      
        }
        else if(seekType==2){
        	//用图书序号寻找图书
        	System.out.println("输入图书序号:");
        	int k;
        	
        	try{
        		  k=input.nextInt();
        	 }catch(Exception e){
        		System.out.println("命令输入错误!请根据提示输入数字命令!");
     			input = new Scanner(System.in);
     			continue;
        	 }
        	 
         	 for(int i=0;i<books.length;i++){	
        		if(books[i].getBookNum()==k){
        			System.out.println("book:"+books[i].getBookName());
        			return;
        		}
        	}
         	System.out.println("图书不存在");
        	continue;
    				
        }else{
        	System.out.println("命令输入错误!请根据提示输入数字1或2");
			continue;
        }
		  
	}
	}

}
package com.imooc.homework;
//定义所有书的类
public class Book {
	private int bookNum;      //书序号
	private String bookName;  //书名	
	public Book(){
		
	}
	
	public Book(int bookNum,String bookName){
		this.bookNum = bookNum;
		this.bookName = bookName;
	}
	
	protected int getBookNum() {
		return bookNum;
	}
	protected void setBookNum(int bookNum) {
		this.bookNum = bookNum;
	}
	protected String getBookName() {
		return bookName;
	}
	protected void setBookName(String bookName) {
		this.bookName = bookName;
	}

}


问题一:

——————————————————————————————————————

运行效果:

***输入命令:1-按照名称查找图书;2-按照序号查找图书

1

输入图书名称:

高数

图书不存在

***输入命令:1-按照名称查找图书;2-按照序号查找图书

——————————————————————————————————————

如上,当运行程序,依次输入"1""高数”时,当输入高数时光标默认是在“输入图书名称”这一行的前面,那么当输入完“高数”时,高数自动显示到“输入图书名称”这一行的下一行的,但调试时发现,这时变量 j 里面存的就是“gaoshugao高数”这个数据串。但如果在输入的时候,点击下鼠标,把光标放在“输入图书名称”这一行的下一行,那么变量 j 就赋值为“高数”,结果运行良好。

我的问题是:输入时和光标的位置有关吗?还是我的编程哪一点有问题?如何改进?

问题二:

——————————————————————————————————————————————

如上面的一段代码:       

 Scanner input=new Scanner(System.in);
       int seekType;
       try{
        seekType=input.nextInt();
       }catch(Exception e){
        System.out.println("命令输入错误!请根据提示输入数字命令!");
        input = new Scanner(System.in);
        continue;
}//排除输入不为数字的情况

——————————————————————————————————————————

当应该输入数字,但如果输入非数字,那么会出现异常。我捕捉到这个异常,输出提示,并用了这个语句“input = new Scanner(System.in);”。请问这个语句有必要用吗?我用是因为老师给的答案里是这么做的,但我不知道为什么要这么做?如果不这样会出问题吗?我的一个猜想是:老师的答案里,input是静态static函数(老师用的是console这个变量),所以需要重新初始化一下,而我的是protect的,是不是就不需要?

因为水平低,这个作业做了一下午加半个晚上。希望提高自己的水平,但见识有限,希望高人能指点一下。

写回答 关注

1回答

  • jklhlkjgljugjk
    2015-07-26 15:28:55

    我也是初学者,学到这里了。

    问题一:

    我也是这种情况,应该是软件自身的原因吧;

    问题二:

    应该是这样

    另外我认为用if else 控制流程不太好,我刚开始也是这样,后来发现如果输入的数字是3或4或5或6.。。。,你会发现这个“异常”是捕捉不到的,可以用switch选择结构,default可以排除这个情况。我觉得异常一块捕捉了更方便啊

    这是我的代码

    import java.util.Scanner;
    public class Book {
     static String [] books={"大学","数据结构","论语"};
     
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      while(true){
      System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
      Scanner s=new Scanner(System.in);
      try{
       int a = s.nextInt();
       switch(a){
       case 1:
        System.out.println("请输入图书名称:");
        String name = s.next();
       for(String o :books){
        if(o.equals(name)){
         System.out.println("book:"+o);
             return ;
        }
       }
        System.out.println("该图书不存在");
           break;
       case 2:
         System.out.println("请输入图书序号:");
         int number=s.nextInt();
         for(String o:books)
          if(o.equals(books[number-1])){
            System.out.println("book:"+o);
            return;
          }
         System.out.println("该图书不存在:");
         break;
       default:
        System.out.println("命令输入错误!");
       }
      }catch(Exception e)
      {
       System.out.println("命令出入错误,请根据提示输入命令");
      }
     }
     }
    }


Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题