Resource leak: 'sc' is never closed
再写购物管理系统是出现了这样的警告:'sc' is never closed,在方法的末尾加sc.close();会报错: Unreachable code具体的程序长这样:@Overridepublic void addToCar() {showAllGood();//显示所有商品Scanner sc = new Scanner(System.in);S
·
再写购物管理系统是出现了这样的警告:'sc' is never closed,
在方法的末尾加sc.close();会报错:
Unreachable code
具体的程序长这样:
@Override
public void addToCar() {
showAllGood();//显示所有商品
Scanner sc = new Scanner(System.in);
System.out.println("请输入商品序号");
int id = sc.nextInt();
int num ;
boolean flag = true;//while的循环条件,在循环体内重新赋值
while(true) {
System.out.println("请输入购买数量");
num = sc.nextInt();
if(goods.get(id).getCount()-num<0) //选购超出库存
System.out.println("抱歉,选购超出库存,请减少购买数量!数量需少于"+goods.get(id).getCount());
else {
flag = false;
goods.get(id).setCount(goods.get(id).getCount()-num);
Goods newgood = new Goods(goods.get(id).getName(),goods.get(id).getPrice(),num);
p.addCar(newgood);
}
}
//sc.close();
}
根据警报sc is never closed 意思就是sc永远不关闭,由于我的sc的取值在while循环内,
而且仔细看我的while循环条件发现是while(true)-死循环。所有sc对象会一直在使用,无法关闭。
然后把while(true)改为while(flag),警告就会消失,而且sc.close();也会正常关闭。
修改后的程序:
@Override
public void addToCar() {
showAllGood();//显示所有商品
Scanner sc = new Scanner(System.in);
System.out.println("请输入商品序号");
int id = sc.nextInt();
int num ;
boolean flag = true;//while的循环条件,在循环体内重新赋值
while(true) {
System.out.println("请输入购买数量");
num = sc.nextInt();
if(goods.get(id).getCount()-num<0) //选购超出库存
System.out.println("抱歉,选购超出库存,请减少购买数量!数量需少于"+goods.get(id).getCount());
else {
flag = false;
goods.get(id).setCount(goods.get(id).getCount()-num);
Goods newgood = new Goods(goods.get(id).getName(),goods.get(id).getPrice(),num);
p.addCar(newgood);
}
}
sc.close();
}
更多推荐
已为社区贡献1条内容
所有评论(0)