反转没有参数的字符串
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
关键字。
我的一部分作业要求我必须在 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
关键字。