我正在做一个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