-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 に答える
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 クラスは宣言されていません。行を挿入する必要があります

Rt rt = new Rt();

使用する前に。さらに、まだ注意しなければならない問題があります。alg_flip メソッドは何もしません。String を受け取り、それを使用して String s1 を生成し、それを返します。ところで、あなたは決してしません

s = alg_flip(s);

そのため、s 変数内に s1 値をプッシュすることはありません。

于 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 に答える