-3

在我的主要方法中,我这样做:

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

4

7 回答 7

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

编辑

如果你使用很多算法,你应该考虑策略模式

您尝试的主要问题仍然是您调用带有参数的方法,但是您没有保存从 return 语句中获得的发生的事情。

编辑2:

我得到了你的主要问题,虽然退货部分也是一个问题:

for(int i = s.length() - 1; i >= 0; i++) {
    s1 = s1 + s.charAt(i);
}

您想在 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);

于 2013-07-31T08:25:05.683 回答
1

唯一的原因是

rt.modify(s);

您忘记 rt 在使用它之前进行初始化。

于 2013-07-31T08:20:28.073 回答
0

未声明 rt 类。您应该插入该行

Rt rt = new Rt();

在使用它之前。此外,还有一个你必须注意的问题。alg_flip 方法什么也不做。您获取 String s,使用它来生成 String s1 并返回它。顺便说一句,你从来没有

s = alg_flip(s);

因此,您永远不会将 s1 值推入 s 变量中。

于 2013-07-31T08:25:20.780 回答
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;

}

于 2013-07-31T08:29:00.787 回答
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()

于 2013-07-31T08:29:18.030 回答
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
}
}
于 2013-07-31T08:33:30.823 回答
0

这意味着您的rt变量指的是null. 您应该创建一个由rt变量引用的对象,如下所示。

RT rt = new RT();// or whatever your class name is
于 2013-07-31T08:21:17.937 回答