当前位置: 首页 > 知识库问答 >
问题:

二传手和二传手到不同的类

阎俊英
2023-03-14

我的问题是,我不知道使用什么代码从我的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

共有2个答案

许正平
2023-03-14

正如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

季凡
2023-03-14

您需要在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 不起作用。这个问题有什么解决方案吗? 谢啦