在我的主要方法中,我这样做:
RTAlgorithm rt = new RTAlgorithm();
String s = "Looooolasdasdl";
rt.encrypt(s);
System.out.println(s);
这是我的RT课程:
package rt.encrypt;
public class RTAlgorithm
{
public static String encrypt(String s) {
alg_flip(s);
return s;
}
private static String alg_flip(String s) {
String s1 = "";
for(int i = s.length() - 1; i >= 0; i++) {
s1 = s1 + s.charAt(i);
}
return s1;
}
}
然而,它在主要方法中的rt.encrypt(s)行给我一个NullPointerException
答案 0 :(得分:4)
如果您在.modify中返回方法中的值,则必须返回值:
你在做:
String s = "Looooolasdasdl";
rt.modify(s);
System.out.println(s);
你需要做
String s = "Looooolasdasdl";
String s2 = rt.modify(s);
System.out.println(s2);
在修改方法中,您需要返回alg_flip()调用
public String modify(String s) {
return alg_flip(s);
}
修改
如果您使用大量算法,则应考虑Strategy Pattern
你尝试的主要问题仍然是你用一个参数调用一个方法,但你不保存你从return语句中得到的结果。
编辑2:
我遇到了你的主要问题,虽然返回部分也是一个问题:
for(int i = s.length() - 1; i >= 0; i++) {
s1 = s1 + s.charAt(i);
}
你想获得我的字符并进行for循环反转,但你加上你的i变量
for(int i = s.length() - 1; i >= 0; i--) {
s1 = s1 + s.charAt(i);
}
这是你应该做的事情
这对我有用:
public class Main {
public static void main(String[] args) throws ParseException {
RTAlgorithm rta = new RTAlgorithm();
String s = "Looooolasdasdl";
s = rta.encrypt(s);
System.out.println(s);
}
}
class RTAlgorithm {
public static String encrypt(String s) {
return alg_flip(s);
}
private static String alg_flip(String s) {
String s1 = "";
for (int i = s.length() - 1; i >= 0; i--) {
s1 = s1 + s.charAt(i);
}
return s1;
}
}
但是如果编写静态方法,则不需要创建实例。
而不是rt.encrypt(s);
你可以说RTAlgorithm.encrypt(s);
答案 1 :(得分:1)
唯一的原因是
rt.modify(s);
您在使用之前忘了初始化rt
。
答案 2 :(得分:0)
这意味着您的rt
变量指的是null
。您应该创建一个由rt
变量引用的对象,如下所示。
RT rt = new RT();// or whatever your class name is
答案 3 :(得分:0)
未声明rt类。你应该插入行
Rt rt = new Rt();
使用之前。 此外,还有一个问题需要注意。 alg_flip方法什么都不做。你获取String,使用它来生成一个String s1并返回它。顺便说一句,你永远不会做
s = alg_flip(s);
所以你永远不要在s变量中推送s1值。
答案 4 :(得分:0)
主要方法:
String s = "Looooolasdasdl";
String s_modified = rt.modify(s);
System.out.println(s_modified);
rt课程:
String modify(String s) {
return alg_flip(s);
}
private static String alg_flip(String s) {
String s1 = "";
for(int i = s.length() - 1; i >= 0; i++) {
s1 = s1 + s.charAt(i);
}
return s1;
}
答案 5 :(得分:0)
rt.modify(s); // since modify() is not a static method
you have to initialize rt first
否则您可以将modify()
方法设为静态,如下所示
public static String modify(String s) {
alg_flip(s);
return s;
}
现在您可以访问此方法ClassName.modify()
答案 6 :(得分:0)
字符串是不可变对象!所以你不能修改一个字符串!
你必须这样做:
String s = "Looooolasdasdl";
//rt.modify(s); //Mistake 1
s = rt.modify(s); //Reassign to s
System.out.println(s);
你的RT.class应该是:
package rt.encrypt;
public class RTAlgorithm
{
public static String encrypt(String s) {
// alg_flip(s); // Mistake 2: You create the String you want return
s = alg_flip(s); // but you have to reassign it to var s!
return s;
}
private static String alg_flip(String s) {
String s1 = "";
for(int i = s.length() - 1; i >= 0; i++) {
s1 = s1 + s.charAt(i);
}
return s1; //You have to return a new string reference
}
}