关闭Scanner却报错

img

报警告,做如下修改,反而报错了,这是为什么?

img


package ych;

import ych.entity.Memory;
import ych.logic.LPcb;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        LPcb lPcb = new LPcb();
        Scanner sr = new Scanner(System.in);

        System.out.print("初始化内存大小:");
        System.out.println();
        Memory memory = new Memory(sr.nextInt());
        System.out.println("初始化成功!");
        while (true) {
            System.out.print("请输入操作数(0、结束\t1、分配\t2、回收):");
            switch (sr.nextInt()) {
                case 0:
                    System.exit(0);
                    break;
                case 1:
                    System.out.print("请输入作业长度:");
                    int size = sr.nextInt();
                    memory = lPcb.首次适应算法(memory, size);
                    lPcb.showPcbs(memory);
                    lPcb.showMemory(memory);
                    break;
                case 2:
                    System.out.print("请输入需要回收的分区编号:");
                    int id = sr.nextInt();
                    System.out.println();
                    memory = memory.releaseMemory(id);
                    lPcb.showPcbs(memory);
                    lPcb.showMemory(memory);
                    break;
                default:
                    System.err.println("\n未知标识符");
                    break;
                    
            }
        }
        sr.close();
    }
}

我用你的代码试了一下,确实报错,原因应该是 while(true)无限循环语句的事,永远也走不到sr.close()这,导致好像是没有sr这个对象

img


这样包裹一下,
另外: System.in是系统自带的输入流,警告提示的是输入流没有关闭,这种情况不用管的,能正常运行。

img

报错很清楚,不可达的代码,上边 while循环需要有一个跳出条件,你可以判断输入如果是 quit 就退出 break这种,总之要有跳出方式