将scanner对象设置为null

时间:2013-10-29 23:46:12

标签: java methods null java.util.scanner bluej

当我尝试编译此代码时,它运行良好,但是当我想测试方法时,第一种方法运行良好,但第二种方法抛出异常错误指针等于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 
}

}

2 个答案:

答案 0 :(得分:2)

将变量设置为null并不能消除所使用的资源。您需要做的是通过以下方式关闭扫描仪:

myScanner.close();

这将允许释放此对象使用的任何资源,并可以再次使用。如果这样做,并且如果在尽可能最本地的范围内声明它,则不需要使变量为空。


至于你的实际问题,请注意你没有主要方法向我们展示你如何测试它,你也没有输入这个扩展的输入类的代码。很难测试您的代码,看看为什么需要这个kludge。我担心你正在修复错误的错误。

答案 1 :(得分:1)

在每种方法结束时,您都会调用setScannersetScanner方法将类的扫描程序对象更改为null,这意味着下次调用方法时,实际上使用的是空扫描程序。

请勿在方法结束时致电setScanner;可以多次使用相同的扫描仪对象,没有任何问题。