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的,是不是就不需要?
因为水平低,这个作业做了一下午加半个晚上。希望提高自己的水平,但见识有限,希望高人能指点一下。
我也是初学者,学到这里了。
问题一:
我也是这种情况,应该是软件自身的原因吧;
问题二:
应该是这样
另外我认为用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("命令出入错误,请根据提示输入命令");
}
}
}
}