私のプログラムは以下のように構成されています:アトムの概念を表すクラスは本質的にストリングであり、一般的な概念のリストで作られた別のクラスです。どちらのクラスも、抽象クラスであるクラスConceptを拡張しています。これは、リスト内で原子概念と任意のネストされた概念の交差を持つことができることを意味します。 各アトムまたはコンストラクトは、toStringメソッドによって出力されます。 は、おおよそこれは、この文脈自由文法に基づいて、話す:Cは抽象クラスコンセプトである場合toString Javaメソッドで再帰を処理する方法は?
C : atom | (C and)+ C
は、原子はAtomicConceptあり、(Cと)+ Cが交点です。
これはAtomicConceptクラスです:
public class AtomicConcept extends Concept{
private String atomicConceptName;
public AtomicConcept(String c) {
this.atomicConceptName = c;
}
@Override
public String toString() {
return atomicConceptName;
}
}
これは、CHE ConceptIntersectionクラスです:
import java.util.List;
public class ConceptIntersection extends Concept{
private List<Concept> list;
public ConceptIntersection(List<Concept> l) throws Exception {
if(l.size()>1)
{
this.list = l;
}
else
{
throw new Exception("Intersection needs at least two concepts!");
}
}
public String toString()
{
return Utils.conceptIntersection + Utils.lparen + Utils.splitConcepts(list) + Utils.rparen;
}
}
あなたはToString関数で見ることができるように、私はまた、と呼ばれるメソッドを作成しましたsplitConceptsは、一般的な概念のリストを入力し、コンマで区切られた各概念で構成される1つの文字列を返します。
public static String splitConcepts(List<Concept> list)
{
String result = "";
for (Concept item : list) {
System.out.println(item);
result += item.toString() + comma;
}
result = result.substring(0, result.length() - 1);
return result;
}
問題はどこですか? 別の関数でネストされた交差点を呼び出すと、この関数は決して終了しないので、私はこの関数に問題があります!
一例:
public static void main(String[] args) throws DLRException {
// TODO Auto-generated method stub
AtomicConcept atom = new AtomicConcept("one");
AtomicConcept at = new AtomicConcept("two");
List<Concept> list = new LinkedList<Concept>();
list.add(at);
list.add(atom);
DLRConceptIntersection intersection = new DLRConceptIntersection(list);
System.out.println(intersection); // works fine
list.add(intersection);
DLRConceptIntersection intersection2 = new DLRConceptIntersection(list);
System.out.println(intersection2); //loop never ends!
}
は、この問題を解決するための正しいアプローチですか?
あなたは自分自身を含んで交差点を持っています。あなたは何を*印刷したいのですか? – user2357112
あなたの 'list'は共有されていますか? – user2357112