Ich machte this FizzBuzz exercise on CodingBat;Der leistungsfähigste Ansatz zum Lösen von FizzBuzz
Bei einer Zeichenfolge str, wenn die Zeichenfolge mit "f" beginnt, geben Sie "Fizz" zurück. Wenn die Zeichenfolge mit "b" endet, geben Sie "Buzz" zurück. Wenn die Bedingungen "f" und "b" erfüllt sind, geben Sie "FizzBuzz" zurück. In allen anderen Fällen geben Sie die Zeichenfolge unverändert zurück.
und kam mit dieser Antwort;
public String fizzString(String str)
{
String sum = "";
if (str.startsWith("f")) sum += "Fizz";
if (str.endsWith("b")) sum += "Buzz";
return (sum == "") ? str : sum;
}
jedoch ging der Autor des Problems für;
public String fizzString(String str)
{
if (str.startsWith("f") && str.endsWith("b")) return "FizzBuzz";
if (str.startsWith("f")) return "Fizz";
if (str.endsWith("b")) return "Buzz";
return str;
}
die Art und Weise zu überflüssig schien ...
Ich habe mich gefragt, würde es einen Unterschied in der realen Welt, Performance-weise, macht für das erste Programm gehen eher dann dem zweiten?
Die zweite ist schneller. Ich glaube nicht, dass die FizzBuzz-Performance in der realen Welt jemals eine Rolle spielt. – erickson
In der realen Welt? Wahrscheinlich nicht. In einer pingeligen Welt gibt es Kompromisse zu beiden Ansätzen. Der erste Ansatz verwendet die 'String'-Verkettung, die [notorisch langsam] sein kann (http://stackoverflow.com/q/1532461/758280). Der zweite Ansatz verwendet mehr Konditionals als der erste. – Jeffrey
String Verkettung ist nicht die zusätzliche Bedingung, die im schlimmsten Fall für Lösung Nr. 2 Überprüfung wert. Sie müssen möglicherweise mehr Speicher für eine Zeichenfolge Verkettung zuweisen, die viel langsamer als die Überprüfung einer booleschen Bedingung –