-1

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

}

4

2 回答 2

2

将变量设置为 null 不会摆脱使用的资源。您需要做的是在使用完扫描仪后通过以下方式关闭它:

myScanner.close();

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


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

于 2013-10-29T23:53:26.723 回答
1

在每个方法结束时,您调用setScanner. 该setScanner方法将类的扫描器对象更改为null,这意味着下次您调用一个方法时,您实际上是在使用空扫描器。

只是不要setScanner在方法结束时调用;可以多次使用同一个扫描仪对象而不会出现任何问题。

于 2013-10-29T23:49:43.143 回答