Ich habe ein Array von 4 chars
, ['A', 'C', 'T', 'G']
, und rekursiv Listen mit einer gegebenen Länge und GC-Inhalt (die Anzahl der G und C's) erzeugt in einer Liste). Ich bin in der Lage, die Listen rekursiv zu generieren und zu überprüfen, ob sie die Bedingungen erfüllten, jedoch bleibt nach der ersten Iteration der for-Schleife (siehe unten) das "A", das der erste Knoten der Liste für die erste Iteration ist. Die drei anderen Methoden in diesem Projekt sind: gcContent
(gibt ein int zurück, das den GC-Inhalt einer Liste darstellt), reverseComplement
(gibt das umgekehrte Komplement einer Liste zurück, dh in umgekehrter Reihenfolge und alle Zeichen werden auf ihre umgeschaltet Komplement; A <> G, C <> T) und compare
(vergleicht zwei Listen und gibt true zurück, wenn sie identisch sind). HierZusätzlicher Knoten in der Liste herumhängen - Rekursion verwenden, um Listen mit einer gegebenen Länge zu erzeugen
ist, was ich habe zur Zeit für reverseComplement
:
public void generateStrands(int n, int k, int rate, Node t){
cont = 0;
char[] array = {'A', 'C', 'G', 'T'};
if(k == n){
if(!compare(t, reverseComplement(t)) && gcContent(t) == rate){
t.printListLn();
}
}
else{
for(int i = 0; i < array.length; i++){
t.add(array[i]);
generateStrands(n, k+1, rate, t);
t.remove();
}
}
}
Und hier sind meine add
und remove
Methoden für meine Node
Klasse:
public void add(char c){
if(base == ' '){
base = c;
}
else{
Node p = this;
Node q = null;
while(p!=null){
q = p;
p = p.next;
}
q.next = new Node(c, null);
}
}
public void remove(){
if(base == ' ' || next == null){
return;
}
else{
Node p = this;
Node q = null;
while(p.next!=null){
q = p;
p = p.next;
}
q.next = null;
}
}
Und hier ist der Ausgang I erhalten (n = 2, Rate = 1):
AC
AG
ACA
ACT
AGA
AGT
ATC
ATG
Ich habe versucht, mit der remove
Methode herumzuspielen, aber ich bin ziemlich sicher, dass diese Methode nicht das Problem ist und dass es die Reihenfolge bestimmter Codezeilen in der generateStrands
Methode sein kann.