【问题标题】:Setters And Getters to different ClassSetter 和 Getter 到不同的类
【发布时间】:2018-06-05 02:51:29
【问题描述】:

我的问题是,我根本不知道使用什么代码将我的值从我的 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());
}

}

这是来自子类的内容,我正在尝试将riesLimit 的值存储到此类主方法的主方法中 包刽子手;

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

【问题讨论】:

    标签: java for-loop


    【解决方案1】:

    就像 rohit 说的,这就像了解 OOP 的基础知识一样简单,具体的封装。

    如果您想更深入地了解 OOP 模式,可以使用观察者模式。这允许您更改任何类实例的状态,即使它们与继承、聚合等无关。

    您可以通过制作观察者列表来扩展解决方案

    你的可观察界面

    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

    【讨论】:

      【解决方案2】:

      您需要在 main 方法中创建该类的一个实例,以便像这样访问该类中可用的变量和方法

      public class PlayHangman {
      
              public static void main(String[] args) {
             Hangman hangman = new Hangman();
             hangman.setTriesLimit(2)
              int value = hangman.getTriesLimit();
      
           }
      

      您可以查看静态关键字以直接访问该值,但这需要对 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
      

      试错现在是你最好的朋友 :) 和谷歌一些问题而不是等待答案:)

      【讨论】:

      • 感谢您的帮助,我认为您只应该在尝试创建具有多个参数/字段的对象时使用该语句。真的很感激!
      • 哈哈没有。玩一玩,你会边走边学 :) 如果它有助于解决你的问题,请确保你选择它作为正确的答案,这样它就可以帮助其他有类似问题的人
      • 这实际上并没有回答问题。您已经创建了一个新的 Hangman 对象,但它还没有设置 triesLimit 并且 int triesLimit = ? 无效并且不会编译。
      • @Zephyr 他想知道为什么他无法获得 setter 和 getter 值......为了你我已经修改了答案:P
      • 这最初有所帮助,因为现在我知道如何将变量放入 PlayHangman 类,但我遇到了错误“线程“主”java.lang.NullPointerException 中的异常”的问题。我认为这与 Hangman 类中的 toString 方法有关。有什么帮助吗?我在帖子中更新了代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 2012-03-12
      • 1970-01-01
      • 2011-12-29
      相关资源
      最近更新 更多