当我尝试编译此代码时,它运行良好,但是当我想测试方法时,第一种方法运行良好,但第二种方法抛出异常错误指针等于null,但如果我更改scanner = null;
到scanner = new Scanner(System.in);
它工作正常,所以如何在不创建新扫描器的情况下解决这个问题
public class Sca extends input
{
private Scanner scanner;
private String userInput;
public ArrayShoppingList11()
{
super();
scanner = new Scanner(System.in);
}
protected void addCar()
{
System.out.println("Please enter the name of the Car to be added");
userInput = scanner.nextLine();
super.add(userInput);
setScanner();
}
protected int getPosition()
{
System.out.println("Please enter the name of the car");
userInput = scanner.nextLine();
int z = super.indexOf(userInput);
System.out.println("The position of " + userInput + "is: " + z); // used for the main class Testing purposes
setScanner();
return z;
}
private void setScanner()
{
if(scanner != null)
{
scanner = null;
}
}
}
public class Main {
public static void main(String[] args) {
ArrayShoppingList1 a = new ArrayShoppingList1();
a .printList();
a.addCar();
a .getPosition();// returning the position of an item using name of the item
a .checkEmpty();
a.additem();
a .printList();
a .removeItem();// removing the item using the index of the item
}
}
答案 0 :(得分:2)
将变量设置为null并不能消除所使用的资源。您需要做的是通过以下方式关闭扫描仪:
myScanner.close();
这将允许释放此对象使用的任何资源,并可以再次使用。如果这样做,并且如果在尽可能最本地的范围内声明它,则不需要使变量为空。
至于你的实际问题,请注意你没有主要方法向我们展示你如何测试它,你也没有输入这个扩展的输入类的代码。很难测试您的代码,看看为什么需要这个kludge。我担心你正在修复错误的错误。
答案 1 :(得分:1)
在每种方法结束时,您都会调用setScanner
。 setScanner
方法将类的扫描程序对象更改为null
,这意味着下次调用方法时,实际上使用的是空扫描程序。
请勿在方法结束时致电setScanner
;可以多次使用相同的扫描仪对象,没有任何问题。