为了账号安全,请及时绑定邮箱和手机立即绑定

老师布置的课后习题,我不按规定的输入整型数字而是输入字符的时候程序陷入死循环怎么解决

主类:

package com.imooc.borrowBook;

import java.util.Scanner;

public class BookManager {


public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);

Book books[] = {new Book("高数",1),new Book("JavaEE",2),new Book("Html5",3),

       new Book("数据结构",4),new Book("C++",5),new Book("操作系统",6)};

while(true){

System.out.println("请选择查找方式:");

System.out.println("1.按书名查找图书     2.按序号查找图书    3.退出");

try{

int num = in.nextInt();

if(num==1){

System.out.println("请输入书名:");

String num_1 = in.next();

//boolean name = false;

for(int i=0;i<books.length;i++){

if(num_1.equals(books[i].bookName)){

System.out.println("book:"+books[i].bookName);

//name = true;

}else

throw new NoExistException();

}

}else if(num==2){

System.out.println("请输入书的序号:");

int num_2 = in.nextInt();

//boolean number = false;

for(int i=0;i<books.length;i++){

if(num_2 == books[i].bookNum){

System.out.println("book:"+books[i].bookName);

//number = true;

}else if (num_2>books.length||num_2<=0){

throw new NoExistException();

}

}

}else if(num==3){

System.out.println("欢迎下次再来!");

System.exit(0);

}else 

throw new Exception();

//System.out.println("命令输入错误,请按提示输入!!!");

}

catch(NoExistException e){

//e.printStackTrace();

System.out.println("该图书不存在!");

System.out.println();

}catch(Exception e){

//e.printStackTrace();

System.out.println("命令输入错误,请按提示输入!!!");

System.out.println();

}

}

}

}



书类:

package com.imooc.borrowBook;


public class Book {

public String bookName;

public int bookNum;

public Book(String bookName,int bookNum){

this.bookName = bookName;

this.bookNum = bookNum;

}


}



自定义异常类:

package com.imooc.borrowBook;


public class NoExistException extends Exception {

public NoExistException(){

}

public NoExistException(String message){

super(message);

}


}


正在回答

2 回答

Scanner in = new Scanner(System.in);这句代码应该放在while循环内,因为你放在外面的话每次都会直接使用上次输入的字符串值,放进去的话会重新定义一个in,就不会出现死循环了。

1 回复 有任何疑惑可以回复我~
#1

泪在笑里哭 提问者

非常谢谢你的帮助,完美的帮我解决了问题。
2017-04-09 回复 有任何疑惑可以回复我~

试了下你的代码确实存在这个问题。想了想应该和c中输入缓冲区不能正常清除的问题是一样的。

大概原因是当Scanner读入了字符的时候,输入缓冲区中读到的字符没有清除,因此之后的每一次while循环就会默

认的再次把之前输入的值读一遍,导致无限循环。

解决的办法很直接,就是把缓冲区中的数据读走(相当于清空),可以在你的第二个catch block中添加一行代码

in.nextLine();

这样就可以了。

1 回复 有任何疑惑可以回复我~
#1

泪在笑里哭 提问者

同样也非常谢谢你的回答,你的一样也可以解决我代码存在的问题,但限于我的水品,我觉得楼上的更加通俗易懂些
2017-04-09 回复 有任何疑惑可以回复我~
#2

慕粉0038445131 回复 泪在笑里哭 提问者

没关系 问题解决了就好啦
2017-04-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师布置的课后习题,我不按规定的输入整型数字而是输入字符的时候程序陷入死循环怎么解决

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信