finally不执行。

来源:1-9 经验总结

ivwv

2016-08-04 11:42

http://img.mukewang.com/57a2b91e0001807d06540192.jpg这个finally只执行了 第一个号System.out.println("是否继续查找:Y是,N否");

之后不能进行用户输入 

问下各位怎么解决啊

写回答 关注

3回答

  • ziom
    2016-08-05 22:40:40
    已采纳

    没见过在finally里这么干的,finally一般是用来释放资源的,不会在里面做一些等待用户输入的操作。

    ivwv 回复ziom

    没什么想问的了 谢谢

    2016-08-09 11:48:45

    共 4 条回复 >

  • ivwv
    2016-08-05 17:27:17
    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("图书不存在");
    	}
    }

    问题都在注释里写了 

    目前最终的代码


  • ivwv
    2016-08-04 13:08:55

    http://img.mukewang.com/57a2cdbb0001eb2b08450298.jpg目前在if外面套了一个while循环就可以继续执行了 但是不清楚原理 有大神能给说说吗

Java入门第三季

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

409779 学习 · 4339 问题

查看课程

相似问题