我的问题是,我不知道使用什么代码从我的getX方法到我的其他类主方法来获取我的值。
package hangman;
公共级刽子手{
private int triesLimit;
private String word;
public void setTriesLimit(int triesLimit) {
this.triesLimit = triesLimit;
}
public void setWord(String word) {
this.word = word;
}
public int getTriesLimit() {
return this.triesLimit;
}
public String getWord() {
return this.word;
}
@Override
public String toString() {
return ("Enter Secret Word " + this.getWord()
+ ".\nEnter max # of tries (Must be under 7) "
+ this.getTriesLimit());
}
}
这是来自子类的,我试图将triesLimit的值存储到这个类的main方法包hangman的main中;
public class PlayHangman {
public static void main(String[] args) {
Hangman hangman = new Hangman();
Scanner scn = new Scanner(System.in);
int triesCount = 0;
int correctCount = 0;
hangman.toString();
int triesLimit = hangman.getTriesLimit();
String secretWord = hangman.getWord();
StringBuilder b = new StringBuilder(secretWord.length());
for (int i = 0; i < secretWord.length(); i++) {
b.append("*");
}
char[] secrectStrCharArr = secretWord.toCharArray();
int charCnt = secretWord.length();
for (int x = 0; triesCount < triesLimit; triesCount++) {
while (charCnt >= 0) {
System.out.println("Secrect Word :" + b.toString());
System.out.println("Guess a letter :");
char guessChar = scn.next().toCharArray()[0];
for (int i = 0; i < secrectStrCharArr.length; i++) {
if (guessChar == secrectStrCharArr[i]) {
b.setCharAt(i, guessChar);
correctCount++;
} else if (guessChar != secrectStrCharArr[i]) {
triesCount++;
System.out.println("Incorrect: " + triesCount);hangmanImage(triesCount,correctCount);
}
}
}
}
}
我试着在这里查找,但找不到子/超类中使用的setter和getter
正如rohit所说,这就像理解OOP的基础知识一样简单,具体到封装。
如果想深入了解OOP模式,可以使用Observer模式。这允许您更改任何类实例的状态,即使它们与继承、聚合等无关。
您可以通过制作观察者列表来缩放解决方案
你的可观察界面
public interface IObservable {
// Set the observer
public void setObserver(IObserver iObserver);
// Notify the observer the current status
public void notifyObserver();
}
你的观察者界面
public interface IObserver {
public void update(boolean status);
}
你的观察者实现
public class PlayHangman implements IObserver {
private boolean status = false;
public void printStatus() {
System.out.println("Status: " + (this.status ? "Win" : "Lose"));
}
@Override
public void update(boolean status) {
// The instance status is updated
this.status = status;
// Print the current status
this.printStatus();
}
}
您可观察的实现
public class Hangman implements IObservable{
private String goalWord = "";
private String currentWord = "";
private int triesLimit = 0;
private int tries = 0;
private IObserver iObserver;
public Hangman(String goalWord, int triesLimit) {
this.goalWord = goalWord;
this.triesLimit = triesLimit;
}
public void setCurrentWord(String currentWord) {
this.currentWord = currentWord;
this.notifyObserver();
}
public void addTry() {
this.tries++;
this.notifyObserver();
}
@Override
public void setObserver(IObserver iObserver) {
this.iObserver = iObserver;
}
@Override
public void notifyObserver() {
// True = win
this.iObserver.update(this.tries < this.triesLimit &&
this.goalWord.equals(this.currentWord));
}
}
你的主课
public class Main{
public static void main(String[] args) {
// PlayHangman (game status)
PlayHangman playHangman = new PlayHangman();
// Hangman initializes with a goalWord and the triesLimit
Hangman hangman = new Hangman("HangmanJava", 5);
// Set the observer
hangman.setObserver(playHangman);
// During the game you just can set the current word and add a try
// You're not setting the status directly, that's the magic of the Observer pattern
hangman.setCurrentWord("Hang");
hangman.addTry();
hangman.setCurrentWord("HangmanJava");
}
}
希望这有助于享受Java
您需要在main方法中创建一个类的实例,以访问该类中可用的变量和方法,如下所示
public class PlayHangman {
public static void main(String[] args) {
Hangman hangman = new Hangman();
hangman.setTriesLimit(2)
int value = hangman.getTriesLimit();
}
您可以查看static关键字来直接访问值,但这需要更多地了解OOP和JAVA。这应该行得通。
希望有帮助:)
编辑
ToString方法只是将模型类中的所有内容转换为字符串,您已经正确地执行了这些操作,但是您的实现不正确。。。。更改您的ToString内容,以便
@Override
public String toString() {
return ("The Secret Word you entered: " + this.getWord()
+ ".\n The max # of tries (Must be under 7): "
+ this.getTriesLimit());
}
你已经初始化了扫描器,它可以做你想做的事情,要求用户输入值,但是你仍然没有实现它,所以把它添加到你的主方法中
Scanner scn = new Scanner(System.in);
hangman.setTriesLimit(scn.nextInt());
hangman.setWord(scn.next());
hangman.toString()//Will work now
试错法是你现在最好的朋友:)用谷歌搜索一些问题,而不是等待答案:)
问题内容: 对不起这个基本问题。我是GoLang的新手。 我有一个名为的自定义类型,我不希望其中的变量直接由调用者使用,而是希望使用/ 方法来实现 下面是我的 这是我的功能 但是我无法继续进行..您能帮我实现GoLang中的吸气剂概念吗? 问题答案: 如果要使用setter,则应使用方法声明: 然后您将可以使用: 这种声明使您可以通过使用以下命令在结构上执行功能 您正在传递指向结构的指针,因此对其
本文向大家介绍PHP 二传手注射,包括了PHP 二传手注射的使用技巧和注意事项,需要的朋友参考一下 示例 设置程序也可以注入依赖项。 当类的核心功能不依赖于依赖项来工作时,这尤其有趣。 在这里,唯一需要的依赖关系就是DatabaseConnection它的构造函数。该Logger依赖性是可选的,因此并不需要成为构造的一部分,使类更容易使用。 请注意,使用setter注入时,最好扩展功能而不是替换它
问题内容: 我的二传手迅速遇到了一个奇怪的问题。我有带有代码的PlayingCard类: 我在另一个类中使用此init()方法,实现如下所示: 当代码看起来像上面的代码时,我在一行中遇到了一个错误: 但是,当我从 等级 和 西服 属性中删除setter和getter时,它工作正常,没有出现错误。 您能解释一下为什么出现此 EXC_BAD_ACCESS 错误吗? 谢谢您的帮助 问题答案: 通过写这个
问题内容: 我下面有一个简单的课程 我在这里初始化 但是,这导致xcode打印出200 5s,然后由于EXC_BAD_ACCESS code = 2而崩溃。为什么会发生这种情况? 问题答案: @vadian在他的回答中提供了一个解决方案,它可以解决您的问题。让我解释一下发生了什么。 您已经创建了一个计算属性,即一个没有变量支持的属性,取而代之的是,getter和setter方法通常在另一个存储的属
我试图使用数据传输对象pojo将MongoCollection设置为返回/保存,但我不知道如何将pojo编解码器配置为忽略getter/setter。 现在我发现了错误 我不控制数据传输对象,也没有“iLink”属性。(属性只是“link”,对象属性名(已经是“link”)用于系统之间的序列化/反序列化。getILink只是从ILink接口继承的getLink的通用版本) 下面是我构建pojo编解
我有一个带有以下注释的类: 我尝试的是忽略反序列化的json。但它不起作用。始终在 JSON 字符串到达时,Jackson lib 将填充 references 属性。如果我只使用@JsonIgnore注释,则 getter 不起作用。这个问题有什么解决方案吗? 谢啦