Сеттеры и геттеры для разных классов - PullRequest
0 голосов
/ 05 июня 2018

Моя проблема в том, что я просто не знаю, какой код использовать для получения моего значения из метода getX в метод main других классов.

package hangman;

открытый класс 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());
}

}

Это из подкласса, и я пытаюсь сохранить значение tryLimit в основной частиэто классовый пакет основного метода hangman;

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);
                }
            }
        }
    }
}

Я попытался найти его здесь, но не смог найти сеттеры и геттеры, используемые в подклассе / суперклассе

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Как сказал Рохит, это так же просто, как понять основы ООП, в частности, инкапсуляцию.

Если вы хотите немного углубиться в шаблоны ООП, вы можете использовать шаблон Observer.Это позволяет вам изменять состояние любого экземпляра класса, даже если они не связаны наследованием, агрегацией и т. Д.

Вы можете масштабировать решение, сделав List of Observer

Вашим наблюдаемымinterface

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

0 голосов
/ 05 июня 2018

Вам нужно создать экземпляр класса в методе main, чтобы получить доступ к переменным и методу, доступным в этом классе, вот так:

public class PlayHangman {

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

     }

Вы можете посмотреть ключевое слово static для прямого доступа к значению, но этотребует немного большего понимания ООП и JAVA.Это должно работать нормально.

Надеюсь, это поможет:)

EDITED

Метод ToString - просто преобразовать все в классе вашей модели в String, который высделали правильно, но вы внедрили неправильно .... Измените содержимое 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, который делает то, что вы хотите, чтобы попросить пользователя ввести значения, но снова у вас нет 't реализовал его, так что добавьте это к вашему основному методу

    Scanner scn = new Scanner(System.in);
         hangman.setTriesLimit(scn.nextInt());
        hangman.setWord(scn.next());
       hangman.toString()//Will work now

Метод проб и ошибок теперь ваш лучший друг :) и Google, а не некоторые вопросы ждут ответа :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...