使用扫描仪摘要 class
Abstract class with scanner
我正在为一个 CS 项目制作游戏,其中一个要求是只有一个用于人工输入的扫描仪。如果我制作一个具有扫描仪对象的抽象 class "player",并创建两个扩展 "player" 的 "human" class,它们是否每个都有自己的扫描仪还是他们共享 "player" 扫描仪?另外,游戏结束后如何关闭扫描器?
do they each have their own scanner or
如果只有 Player
class 有 Scanner
,child 不会自动有 Scanner
,除非 child/other 可以访问classes.
do they share the "player" scanner?
除非您允许他们通过 static
访问或通过 getter
或任何方法访问扫描仪,否则不会直接访问。
how do I close that scanner when I end the game?
您可以在 Player
中声明可以为您完成的方法。我猜你想在人类 win 之一后关闭扫描仪。
此外,值得注意的是,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;
}
}
根据您的意见和问题,我知道您创建了一个 Player
摘要 class 和两个具体的 Human
class。而且您实际上只想拥有一台扫描仪。
在这种情况下,您应该在 Player
class static
中创建 Scanner
字段。这样你就只有一个实例Scanner
。你可能应该添加一个 getter。让我给你看代码:
public abstract class Player {
private static Scanner scanner = new Scanner (System.in);
public static Scanner getScanner () {
return scanner;
}
}
如果您想关闭扫描器,只需调用close
:
Player.getScanner().close();
是不是很简单?
我不明白的另一件事是,为什么要创建摘要 class?这是我的建议:使 Player
成为具体的 class 并创建两个 Player
对象来代表两个玩家。我看到很多人犯了这个错误。初学者通常喜欢创建 classes 而不是对象。继承意味着"is a kind of"。另一方面,创建对象可以解释为 "is a"。所以在你的情况下,人类 是一个 玩家,除非你想让电脑也玩。
我正在为一个 CS 项目制作游戏,其中一个要求是只有一个用于人工输入的扫描仪。如果我制作一个具有扫描仪对象的抽象 class "player",并创建两个扩展 "player" 的 "human" class,它们是否每个都有自己的扫描仪还是他们共享 "player" 扫描仪?另外,游戏结束后如何关闭扫描器?
do they each have their own scanner or
如果只有 Player
class 有 Scanner
,child 不会自动有 Scanner
,除非 child/other 可以访问classes.
do they share the "player" scanner?
除非您允许他们通过 static
访问或通过 getter
或任何方法访问扫描仪,否则不会直接访问。
how do I close that scanner when I end the game?
您可以在 Player
中声明可以为您完成的方法。我猜你想在人类 win 之一后关闭扫描仪。
此外,值得注意的是,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;
}
}
根据您的意见和问题,我知道您创建了一个 Player
摘要 class 和两个具体的 Human
class。而且您实际上只想拥有一台扫描仪。
在这种情况下,您应该在 Player
class static
中创建 Scanner
字段。这样你就只有一个实例Scanner
。你可能应该添加一个 getter。让我给你看代码:
public abstract class Player {
private static Scanner scanner = new Scanner (System.in);
public static Scanner getScanner () {
return scanner;
}
}
如果您想关闭扫描器,只需调用close
:
Player.getScanner().close();
是不是很简单?
我不明白的另一件事是,为什么要创建摘要 class?这是我的建议:使 Player
成为具体的 class 并创建两个 Player
对象来代表两个玩家。我看到很多人犯了这个错误。初学者通常喜欢创建 classes 而不是对象。继承意味着"is a kind of"。另一方面,创建对象可以解释为 "is a"。所以在你的情况下,人类 是一个 玩家,除非你想让电脑也玩。