2016-10-02 4 views
0

Ich bekomme die Zahlen richtig eingescannt, aber die Methoden funktionieren nicht richtig. Zuerst tut man nichts und der zweite geht in eine Endlosschleife.Warum funktioniert die Methode nicht "richtig"?

Die aufgerufene Methode funktioniert nicht richtig. Ich bin mir nicht sicher, was ich tun soll.

import java.util.Scanner; 
public class testSequence { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    int enterNumber = scan.nextInt(); 
    System.out.println("1 for Iteration, 2 for Recursion: "); 
    int type = scan.nextInt(); 

    if (type == 1){ 
     computeIteration(enterNumber); 
    } else if (type == 2){ 
     computeRecursion(enterNumber); 
    } 
} 


public static int computeIteration(int enterNumber) { 
    int answer; 
    int multiplier = 1; 
    int count = 0; 
    int addend = 0; 
    if (enterNumber == 0) { 
     count++; 
     return enterNumber; 
    } else if (enterNumber == 1) { 
     count++; 
     return enterNumber; 
    } else { 

     for (int i = 0; i <= enterNumber; i++) {//need to adjust "i" for counter correction 

      enterNumber = (multiplier * 2) + addend; 
      addend = multiplier; 
      multiplier = enterNumber; 
      count += 1; 
     }//end for loop 
     answer = enterNumber; 
    }//end else 
    return answer; 
}//end computeIteration 

public static int computeRecursion(int n) { 
    int count = 0; 
    if (n == 0) { 
     count++; 
     return 0; 
    } else if (n == 1) { 
     count++; 
     return 1; 
    } else { 
     count++; 
     return computeRecursion(2 * (n - 1)) + computeRecursion(n - 2); 
    } 

}//end computerRecursion() 

}//end Sequence() 
+0

Ich sehe, dass Sie rufen "computeIteration", aber dann tun Sie nichts mit dem Ergebnis. Könnte das ein Teil des Problems sein? – ajb

+0

Sie erhöhen an mehreren Stellen in beiden Methoden "Anzahl", aber Sie verwenden es nicht. – Murillio4

+0

Murillio4 Ich weiß das, danke. Ich mache mir mehr Gedanken darüber, warum die Methode nicht richtig funktioniert. @ajb es soll die Antwort zurückgeben, aber die Antwort wird überhaupt nicht angezeigt. – platypus87

Antwort

0

Sie drucken nie die Antwort.

if (type == 1){ 
     computeIteration(enterNumber); 
    } else if (type == 2){ 
     computeRecursion(enterNumber); 
    } 

Beachten Sie, wie Sie die Funktionen aufrufen, aber Sie nie etwas mit dem Ergebnis tun.

Sie wahrscheinlich gemeint:

if (type == 1){ 
    System.out.println(computeIteration(enterNumber)); 
    } else if (type == 2){ 
    System.out.println(computeRecursion(enterNumber)); 
    } 

Oder, wenn Sie bekommen Lust wollte:

UnaryOperator<Integer> f = 
    type == 1 ? 
     computeIteration 
     : computeRecursion; 

System.out.println(f.apply(enterNumber)) ; 

nur eine Ergänzung, da Sie gefragt. Ich benutze den ternären Operator, weil ich zwischen 2 Dingen wählen muss. In einem Fall wie diesem ist es sauberer als eine volle if Aussage.

Die UnaryOperator ist eine funktionale Schnittstelle. Mit ihnen können Sie eine Funktion in einer Variablen speichern. Dies ist nützlich, wenn Sie in solchen Fällen zwischen zwei Funktionen wählen möchten, deren Signaturen identisch sind (beide Funktionen nehmen einen int und geben einen int zurück) und verwenden das Ergebnis.

Ich speichere eine Ihrer Funktionen in f, dann rufen Sie es durch Schreiben f.apply(9) (apply "gilt" die Argumente für die Funktion; Aufruf).

Beachten Sie, dass Sie keine funktionalen Schnittstellen nur für Kicks verwenden sollten, da sie Code weniger klar machen können. Wenn sie jedoch richtig verwendet werden, können sie den Code viel einfacher machen; besonders wenn sie mit anonymen Funktionen gepaart sind.

+0

Das ist, was ich falsch gemacht habe. Danke für die Hilfe!! – platypus87

+0

was macht der untere eigentlich? Das sieht VIEL fortgeschrittener aus, als ich je gesehen habe (was nicht viel ist). Es sieht ähnlich aus, was ich als Tertiär-Operator von "C" kenne. Bin ich sogar nah dran? – platypus87

+0

@ platypus87 Ya, der ternäre Operator ist nur ein ternärer Operator. Funktioniert gleich. Ich werde eine kurze Beschreibung des Rests schreiben. – Carcigenicate

Verwandte Themen