ivwv
2016-08-04 11:42
这个finally只执行了 第一个号System.out.println("是否继续查找:Y是,N否");
之后不能进行用户输入
问下各位怎么解决啊
没见过在finally里这么干的,finally一般是用来释放资源的,不会在里面做一些等待用户输入的操作。
import java.util.Scanner;
public class Test1 extends Test2 {
book b = new book();
public static void main(String[] args) {
// TODO Auto-generated method stub
Test1 t =new Test1();
t.show();
}
//用show方法通过if判断调用show1和show2方法
public void show(){
Scanner sc = new Scanner(System.in);
try {
b.books();
int i = sc.nextInt();
if (i==1){
super.show1();
}else if(i == 2){
super.show2();
}else{
b.sys3();
}
}catch(Exception e){
b.sys3();
}finally{ //通过finally块来判断用户接下来的操作
System.out.println("是否继续查找:Y是,N否");
Scanner ccc =new Scanner(System.in);
//关于之前问的finally块执行不完全的,解决办法:可以通过在外面加一个while循环 就会继续执行
//也可以新new一个Scanner 然后也会继续执行
//目前这个是之前在Tese1类里new一个Scanner,所以要是只通过在finally块里新new一个Scanner的话
//会把之前的sc.next()略过,继续执行到下一个ccc.nextLine()
//不过用用while循环里面在新new一个Scanner 和在show方法里也新new一个Scanner 就可以解决了
//目前我只知道这么多 没说到的希望大神们能继续说全 谢谢啦!!
while(true){
String yes = ccc.nextLine();
if (yes.equals("y")||yes.equals("Y")){
show();
break;
}else if (yes.equalsIgnoreCase("N")||yes.equals("n")){
System.out.println("感谢使用!");
break;
}else {
b.sys3();
continue;
}
}
}
}
}import java.util.Scanner;
//用show1方法来储存根据编号搜索图书的程序
public class Test2 extends book{
Scanner sc = new Scanner(System.in);
public void show1(){
super.sys2();
try{
int number = sc.nextInt();
if(number ==1){
super.gs();
}else if (number == 2){
super.yy();
}
}catch(Exception e){
super.bcz();
}
}
//用show2方法来储存用图书名搜索的图书程序
public void show2(){
super.sys1();
try {
String title = sc.nextLine();
if (title.equals("高数")){
super.gs();
}else if (title.equalsIgnoreCase("论语")){
super.ly();
}else{
super.bcz();
}
}catch(Exception e){
super.sys3();
}
}
}package tryCatchfinally;
//用来储存所用到的方法
public class book {
public void books(){
System.out.println("输入命令:1-按照名称查询图书;2-按照序号查询图书");
}
public void sys1(){
System.out.println("请输入图书名字");
}
public void sys2(){
System.out.println("请输入图书编号");
}
public void sys3(){
System.out.println("请按提示输入,请重新输入");
}
public void ly(){
System.out.println("论语");
}
public void yy(){
System.out.println("音乐");
}
public void gs(){
System.out.println("高数");
}
public void bcz(){
System.out.println("图书不存在");
}
}问题都在注释里写了
目前最终的代码
目前在if外面套了一个while循环就可以继续执行了 但是不清楚原理 有大神能给说说吗
Java入门第三季
409775 学习 · 4546 问题
相似问题