Модификация моего кода, чтобы иметь методы, действующие на объекты - PullRequest
0 голосов
/ 04 декабря 2018

Это мой код:

public class Word{

  String text;

  public Word(String text){
    this.text = text;
  }

  public static boolean isPalindrome(Word word){

    char[] text1 = new char[word.text.length()];

    for(int i = 0; i< word.text.length(); i++){
      text1[i] = word.text.charAt(i);
    }
    char[] text2 = new char[word.text.length()];
    int j = 0;
    for(int i = word.text.length()-1; i >=0; i--){
      text2[j] = word.text.charAt(i);
      j++;
    }

    for(int i = 0; i < word.text.length(); i++){
      if(text2[i]!=text1[i]){
        return false;
      }
    }
    return true;
  }

  public static void main(String[] args){

    Word word = new Word("racecar");

    System.out.println(isPalindrome(word));

  }
}   

Цель

Это работает, но я пытаюсь переписать свой код, чтобы как-то передать объект и заставить метод действоватьЭто.Таким образом, метод не должен принимать никаких входных данных, и я должен иметь возможность написать object.isPalindrome() и вывести его boolean.

Это не для домашней работы или чего-то еще.Просто хотел еще раз испытать себя, потому что я довольно слаб с предметами.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018
public class Word{

  String text;

  public Word(String text){
    this.text = text;
  }

  public   boolean isPalindrome(){

    char[] text1 = new char[this.text.length()];

    for(int i = 0; i< this.text.length(); i++){
      text1[i] = this.text.charAt(i);
    }
    char[] text2 = new char[this.text.length()];
    int j = 0;
    for(int i = this.text.length()-1; i >=0; i--){
      text2[j] = this.text.charAt(i);
      j++;
    }

    for(int i = 0; i < this.text.length(); i++){
      if(text2[i]!=text1[i]){
        return false;
      }
    }
    return true;
  }

public static void main(String[] args){
    Word word = new Word("racecar");
    System.out.println(word.isPalindrome());
 }
}

то же самое со статической пустой функцией main весь код;)

0 голосов
/ 05 декабря 2018

Следующий ответ из-за тега oop.

Ваш алгоритм Палиндрома

Шаги, которые вы делаете:

  1. сделать *От 1009 * до char[]
  2. создайте перевернутое char[] первого
  3. сравните два char[]

Перепишите в OOP

2.Шаг алгоритма

Я просто копирую и вставляю ваш код в новый метод и возвращаю новый Word.

public Word reverse() {
    char[] reversed = new char[text.length()];
    int j = 0;
    for (int i = text.length() - 1; i >= 0; i--) {
        reversed[j]= text.charAt(i);
        j++;
    }
    return new Word(String.valueOf(reversed));
}

3.Шаг алгоритма

Поскольку метод reverse возвращает новый Word, мне нужно сравнить два Word -объекта.Это можно сделать с помощью equals -метода.Там нам нужно переопределить его с Object.

Алгоритм

public boolean isPalindrome() {
    Word reversed = reverse();
    return this.equals(reversed);
}

Где находится 1. Шаг

Нам просто здесь это не нужно,потому что мы сравниваем два Word с, а не два char[].

полный код

public class Word {

    private String text;

    public Word(String text) {
        this.text = text;
    }

    public boolean isPalindrome() {
        Word reversed = reverse();
        return this.equals(reversed);
    }

    public Word reverse() {
        char[] reversed = new char[text.length()];
        int j = 0;
        for (int i = text.length() - 1; i >= 0; i--) {
            reversed[j]= text.charAt(i);
            j++;
        }
        return new Word(String.valueOf(reversed));
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Word word = (Word) o;

        return text != null ? text.equals(word.text) : word.text == null;
    }

    @Override
    public int hashCode() {
        return text != null ? text.hashCode() : 0;
    }

}
0 голосов
/ 04 декабря 2018

Очень просто, вместо использования word, используйте this, что относится к объекту, для которого вызывается метод.Затем вам нужно удалить ключевое слово static.Так что-то вроде:

public boolean isPalindrome(){

    char[] text1 = new char[this.text.length()];

    for(int i = 0; i< this.text.length(); i++){
       text1[i] = this.text.charAt(i);
    }
    char[] text2 = new char[this.text.length()];
    int j = 0;
    for(int i = this.text.length()-1; i >=0; i--){
       text2[j] = this.text.charAt(i);
       j++;
    } 

    for(int i = 0; i < this.text.length(); i++){
       if(text2[i]!=text1[i]){
          return false;
       }
    }
    return true;
}

И тогда вы можете назвать это как:

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