0

文字列を取得し、区切り文字に基づいて2つの文字列に分割することになっているvoidメソッドがあります。デバッガーを使用したことで、メソッドは正しく機能しているように見えますが、結果を格納するメソッドに渡す2つの空の文字列は更新されていないようです。私はここで何かばかげたことをしているに違いありませんが、どんな助けでもありがたいです!

public static void main(String[] args) {
    String dictFile = "/Users/simonrhillary/Desktop/Dictionary(3).txt";
    String synFile = "/Users/simonrhillary/Desktop/Synonyms(2).txt";
    fileReader dictFR = new fileReader();
    fileReader synFR = new fileReader();
    dictFR.filePath = dictFile;
    synFR.filePath = synFile;
    dictFR.openFile(dictFile);
    synFR.openFile(synFile);
    String[] dictionary = dictFR.fileToArray();
    String[] synonyms = synFR.fileToArray();
    String regx = "^[aflmptu]+$";
    String regexTemplate = "^[]+$";
    String word1 = "";
    String word2 = "";
    synToWords(synFR.getLine(3), word1, word2);//error seems to be here. 
                                                       //word1 and word 2 stay ""
    System.out.println(word1 +" " + word2);
    printArray(findCombos(dictionary, word1, word2));

}

public static void synToWords(String syn, String wordI, String wordII){
    String[] words = syn.split("\\t");
    wordI = wordI + words[0];
    wordII = wordII + words[1];
}

私が投稿していない他の方法がありますが、それらはすべて正常に機能しています。問題はsynToWordsメソッドだけです。どうもありがとう!

4

2 に答える 2

7

Javaは参照を値で渡します。したがって、この行:

wordI = wordI + words[0];

新しい文字列をに割り当てwordIますが、変更されるのは参照のローカル(メソッド内)コピーのみです。元のword1変数は引き続き元の文字列を参照します。

それを機能させるために、代わりに配列を使用することができます:

public static void synToWords(String syn, String[] word1And2){
    String[] words = syn.split("\\t");
    word1And2[0] = word1And2[0] + words[0];
    word1And2[1] = word1And2[1] + words[1];
}

そしてあなたのメインコードで:

String[] words = { "", "" };
synToWords(synFR.getLine(3), words);
System.out.println(words[0] +" " + words[1]);

または、単純に文字列の配列を返すこともできます。

public static String[] synToWords(String syn){
    String[] words = syn.split("\\t");
    return new String[] {words[0], words[1]};
}

String[] words = synToWords(synFR.getLine(3));
System.out.println(words[0] +" " + words[1]);
于 2013-01-07T18:39:23.620 に答える
1

Javaは完全に値による呼び出しです。wordIとwordIIは、2つの参照式の値のコピーです。参照式は、nullまたはオブジェクトへのポインターのいずれかです。synToWordsでwordIなどに割り当てる場合、synToWordsのローカルコピーが指すものだけを変更します。

1つの解決策は、メソッドに2つの部分を含むString[]を返すようにすることです。次に、呼び出し元は結果の要素をその変数に割り当てることができます。

于 2013-01-07T18:40:45.380 に答える