我正在做一個CS項目的遊戲,其中一個要求是隻有一個掃描儀用於人類輸入。如果我創建一個具有掃描器對象的抽象類「播放器」,並創建兩個擴展「播放器」的「人類」類,他們每個人都有自己的掃描器還是共享「播放器」掃描器?另外,我在結束遊戲時如何關閉掃描儀?抽象類與掃描儀
抽象類與掃描儀
回答
根據您的意見和你的問題,我知道您創建了一個Player
抽象類和兩個具體Human
類。而你實際上只想要一臺掃描儀。
在這種情況下,您應該在Player
類static
中設置Scanner
字段。這樣你只有一個實例的Scanner
。你應該添加一個吸氣劑。讓我告訴你的代碼:
public abstract class Player {
private static Scanner scanner = new Scanner (System.in);
public static Scanner getScanner() {
return scanner;
}
}
如果你想關閉掃描儀,只需調用close
:
Player.getScanner().close();
是不是很簡單?
另一件我不明白的事情是,你爲什麼要創建一個抽象類?這裏是我的建議:使Player
成爲一個具體的課程,並創建兩個Player
對象來表示這兩個玩家。我看到很多人犯這個錯誤。初學者經常喜歡創建類而不是對象。繼承意味着「是一種」。另一方面創建對象可以被解釋爲「是一個」。所以在你的情況下,人類是一個播放器,除非你想讓電腦播放。
我有玩家階級,因爲我也必須實現不同的AI控制玩家。我有具體的方法「canmakemove」和抽象方法「getplayertype」和「getmove」。有沒有比抽象類更好的做這件事? – xSpartanCx
做他們每個人都有自己的掃描儀或
如果只有Player
類有Scanner
,孩子並不會自動擁有該Scanner
除了它是爲孩子/其它類訪問。
他們共享「播放器」掃描儀嗎?
不能直接到你允許他們訪問掃描儀,通過static
訪問或通過getter
或任何方法手段。
我在結束遊戲時如何關閉掃描儀?
您可以在Player
中聲明方法,它可以爲您做到這一點。我想你只想關閉掃描儀一旦人類贏得。
此外,值得注意的是,如果您正在使用多線程的東西,Scanner
不是線程安全的。所以,我建議你應該更好地爲個人創建單獨的Scanner
,並在人類放鬆遊戲後關閉它。
如果您取出由System.in
輸入,你應該有共同的Scanner
,否則關閉一個Scanner
將阻止所有其他Scanner
期從閱讀。
您可以有單個Scanner
實例,因爲您可以使用Singleton設計模式。
abstract class Player {
private static final Scanner scanner = new Scanner(System.in);
public Scanner getScannerInstance() {
return scanner;
}
}
我的教授希望我們在整個程序中只有一臺掃描儀,所以如果有兩個人在玩遊戲,我就無法做到,因此每個人都有自己的掃描儀(這是合乎邏輯的事情)。要創建掃描儀,我使用'掃描儀掃描=新掃描儀(System.in);',每個玩家只使用'scan.next();' – xSpartanCx
但是如果我這樣做,將不會有兩個掃描儀,因爲我必須使用'oPlayer.closeScanner()'和'xPlayer.closeScanner();'來關閉每個玩家。 – xSpartanCx
- 1. 掃描,掃描儀類
- 2. 與掃描儀
- 3. 與掃描儀
- 4. 掃描儀類 - hasNextDouble()
- 5. PHP類掃描儀
- 6. 掃描儀類Java
- 7. 與掃描儀對象錯誤java.util.NoSuchElementException
- 8. 掃描儀內的掃描儀錯誤
- 9. 掃描儀對象跳過
- 10. NoSuchElementException異常與掃描儀類
- 11. 與掃描儀類的異常
- 12. C#代碼掃描:聲納掃描儀與SonarQube掃描儀爲MSBuild
- 13. 與掃描儀遊戲的Java掃描儀錯誤
- 14. 掃描儀類方法
- 15. 使用掃描儀類
- 16. java - 掃描儀類NoSuchElementFoundException
- 17. 掃描儀類幫助
- 18. 與nextInt()掃描儀錯誤
- 19. 錯誤與掃描儀
- 20. Confusin錯誤與掃描儀
- 21. 問題與掃描儀
- 22. 無法與掃描儀
- 23. 問題與掃描儀
- 24. 掃描儀+ TesterClass?
- 25. JFileChooser掃描儀?
- 26. 掃描儀NoSuchElementException
- 27. 掃描儀,useDelimiter
- 28. 由掃描儀
- 29. 掃描儀不掃描我的輸入
- 30. 使用掃描儀掃描txt文件
如果您想共享播放器掃描儀,請將其標記爲靜態。 – user2953113