修改我的代码以使方法作用于对象

时间:2018-12-04 20:03:34

标签: java oop object constructor

到目前为止,这是我的代码:

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 :(得分:0)

非常简单,使用this而不是使用word,它引用了调用该方法的对象。然后,您需要删除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()

答案 1 :(得分:0)

以下答案是由于oop标签所致。

您的Palindrom算法

您要执行的步骤是:

  1. string改成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;
    }

}

答案 2 :(得分:-1)

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

与static void main函数相同 整个代码;)