反转没有参数的字符串

Reverse a string with no parameters

我的一部分作业要求我必须在 class 中创建一个方法来反转输入字符串。导师写了驱动,我要完成class。我刚刚开始,一直在研究如何反转 class 中的字符串。他还指示使用 "return this" 我也遇到了麻烦,所以我使用了 "return c"

作业:

reverse – This method will take no parameters. It will reverse the String for the dNACode/ For example if the dNACode is “ABC”, after this method the dNACode is “CBA”. The method will return the current object (return this).

这是我的 Class:

public class ComputerMicrobe
{

    private String name;  // Instance variable for name of the Computer Microbe
    private String dNACode; // Instance variable to hold the number of Computer Microbe
    private String reverse;

    // Constructor Methods

    public ComputerMicrobe (String newName, String newDNACode){

        this.setName(newName);
        this.setDNACode(newDNACode);

    } // End Constructor Methods

    //Accessor Methods

    public String getName(){return this.name;}

    public String getDNACode(){return this.dNACode;}

    public String getReverse(){return this.reverse;}

    // Mutator Methods

    public void setName(String newName) {this.name = newName;}

    public void setDNACode(String newDNACode) {this.dNACode = newDNACode;}

    public String reverse(){

        int i;
        int n;
        String c = null;

        n = dNACode.length();

        for (i = n - 1; i >= 0; i--){

            c = c + dNACode.charAt(i);

        } // End for loop

        return c;

    } // End reverse

    } // End reverse


} // End Class

这是驱动程序(由讲师编写):

import java.util.Scanner;

public class CluffAaronWeek7Prog

{

    public static void main (String[] args)

        {
              Scanner stdIn = new Scanner(System.in);
              String name;    //Auxiliar ComputerMicrobe name
              String dNACode;   //Auxiliar ComputerMicrobe DNA Code
              ComputerMicrobe a, b, c; // ComputerMicrobe objects

              System.out.println("Enter name of first ComputerMicrobe");
              name = stdIn.next();
              System.out.println("Enter DNA Code for first ComputerMicrobe");
              dNACode = stdIn.next();
              a = new ComputerMicrobe(name, dNACode);

              System.out.println("Enter name of second ComputerMicrobe");
              name = stdIn.next();
              System.out.println("Enter DNA Code for second ComputerMicrobe");
              dNACode = stdIn.next();
              b = new ComputerMicrobe(name, dNACode);

              System.out.println("Initial set of ComputerMicrobes");
              System.out.println(a);
              System.out.println(b);

              //System.out.println("ComputerMicrobe a after mutation");
              //a.mutate();
              //System.out.println(a);

              System.out.println("ComputerMicrobe b after reverse");
              b.reverse();
              System.out.println(b);

              //System.out.println("ComputerMicrobe c after reproduction of a and b");
              //c = a.reproduce(b);
              //System.out.println(c);

              //System.out.println("ComputerMicrobe c after mutation and reverse");
              //c.mutate().reverse();
              //System.out.println(c);

              //System.out.println("ComputerMicrobe b after invasion of reverse a");
              //b.invadedBy(a.reverse());
              //System.out.println(b);
    } // end main
} // end class

我一次测试一个部分,所以这就是为什么大多数行都被标记为注释的原因。

当我 运行 驱动程序时,我将此作为输出:

您在 @ 中看到的是 ComputerMicrobe 实例的字符串表示形式。当一个对象被传递到 System.out.println() 时,默认的 toString() 方法被调用。因此,如果您重写 ComputerMicrobe class 中的 toString() 方法,以便它 return 成为 dnaCode 变量,这将在打印对象时输出。

这里是关于 toString() 方法的link,应该可以帮助您了解它的作用和使用方法。

关于 return this,这就是您需要做的,而不是 return c。它所做的是 return class 的当前实例。因此,如果您调用 b.reverse() 将 return b.

因此,在这些更改之后,您的 reverse() 方法应该如下所示:

public ComputerMicrobe reverse() {
  int i;
  int n;
  String c = "";

  n = dNACode.length();

  for (i = n - 1; i >= 0; i--){
    c = c + dNACode.charAt(i);
  }

  dNACode = c;
  return this;
}

进行这些更改的原因是,当您 return this 时,您正在 return 创建一个 ComputerMicrobe 对象而不是 String,因此return 方法的类型必须更改。此外,由于 c 未被 returned,因此必须将其放置在程序其余部分可以访问的某个位置,以便进入将输出的 dNACode 成员变量在 toString() 方法中。最后 c 被初始化为 null,它不是 String,因此将一个字符连接到它上面将不会按预期工作。它应该被初始化为一个空 String。希望这一切都是有道理的,很乐意进一步解释或为您不确定的任何事情提供一些链接。

这里有一些可以帮助您入门的方法:

This one is another SO question about concatenating null strings. And this one 是关于 this 关键字。