2013-10-29 109 views
-1

當我嘗試編譯此代碼時,它運行良好,但是當我想測試方法時,第一種方法運行良好,但第二種方法拋出的異常錯誤指針等於空,但如果我改變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

你爲什麼要將掃描儀設置爲空? – kviiri

+0

,因爲當我讀取userInput tiwce時,它只會從用戶那裏獲取第一個舊輸入並將其添加到掃描儀 –

+0

@mohamedghassar:您沒有主要方法向我們展示如何測試此代碼,您也沒有代碼輸入類是這個擴展的類。很難測試你的代碼,看看你爲什麼需要這個kludge。我擔心你正在修復錯誤的錯誤。 –

回答

1

在您的每種方法結束時,請致電setScannersetScanner方法將類的掃描器對象更改爲null,這意味着下次您調用方法時實際上使用的是空掃描器。

只是在方法結束時不要撥打setScanner;相同的掃描儀對象可以多次使用,而不會有任何問題。

2

將變量設置爲null不會擺脫使用的資源。你需要做的是接近掃描儀,當你通過使用它來完成:

myScanner.close(); 

這將允許此對象使用的所有資源被釋放,並可以再次使用。如果你這樣做,並且如果你聲明它在最可能的局部範圍內,則不需要將變量歸零。


至於你的實際問題時,請注意,你必須告訴我們你是如何測試這個沒有main方法,也沒有你的代碼輸入類這一項擴展之一。很難測試你的代碼,看看你爲什麼需要這個kludge。我擔心你正在修復錯誤的錯誤。