2016-07-09 16 views
0

Ich versuche, eine Summe von aufeinander folgenden ungeraden Quadraten hinzuzufügen, um die gleiche Zahl zu addieren. Zum Beispiel: die ersten 4 aufeinander folgenden ungeraden Quadratzahlen zusammen ergeben 84, (1 * 1) + (3 * 3) + (5 * 5) + (7 * 7) = 84. Der Attached ist mein Code. Ergebnis 2, der Nicht-Schleifencode, ist korrekt. Ich brauche Hilfe bei der Auflösung dessen, was ich falsch mache, mit dem Loopcode von result1.Versuchen Sie eine Summe der ersten aufeinanderfolgenden ungeraden Quadrate hinzuzufügen?

Eingangsnummer entspricht der Anzahl der angeforderten ungeraden Quadrate.

public static int sumWithLoop (int inputNumber) 
{ 
    int result1 = 0; 
    int counter = 1; 

    while (counter <= inputNumber) 
    { 
     result1 = result1*result1 + counter; 
     counter = counter + 2; 
    } 
    return result1; 
} 
public static int sumWithoutLoop (int inputNumber) 
{ 

    int result2 = (inputNumber*(2 * inputNumber - 1) * (2 * inputNumber + 1)/3); 
    return result2; 
} 

Antwort

1

Sie bedeutete wahrscheinlich result1 = result1 + counter * counter; statt result1 = result1*result1 + counter;.

+0

Ich habe den Code ausprobiert. Eingabe 4 ---> Ergebnis 1 = 10 und Ergebnis 2 = 84. – TSD302

+0

@ TSD302 Was ist 'inputNumber'? Verwenden Sie Werte aus Ihrem Beispiel, ist es "4" (Anzahl der ungeraden Quadrate zu addieren), "7" (max. Ungerade Zahl zu Quadrat) oder "84" (Zahl zu erreichen)? Ihr Code mit dem Fix aus dieser Antwort geht davon aus, dass 'inputNumber'' 7' (oder '8') ist, weil Sie mit der ungeraden' counter' Variablen vergleichen. – Andreas

+0

InputNumber ist die angeforderte Anzahl von Oddsquares. In diesem Beispiel versuche ich, eine Anzahl von ungeraden Quadraten hinzuzufügen, was 4 ist. Die Anzahl, die ich erreichen möchte, ist 84. In einem anderen Beispiel. Ich würde 7 ungerade quadratische Zahlen eingeben, und das Ergebnis wäre 455. – TSD302

0

Die meisten Ihres Problems ist in der Mathematik innerhalb der while Schleife.

  1. result1 sollte auf 1 initialisiert wird (zumindest die Art, wie ich es mache.)
  2. Ihre erste Linie in dem Block Quadraten result1 und fügt counter zu. Was Sie brauchen, ist etwas mehr wie folgt aus:

    result1 = result1 + (int) (Math.pow(1 + 2 * counter, 2)); 
    

    Dies geschieht result1 und fügt die nächste ungerade Quadrat zu. (1 + 2 * counter = die nächste ungerade Zahl)

  3. Mit dem obigen Code die nächste ungerade Zahl ist, um zu bestimmen, counter sollte von am Ende des while Schleife inkrementiert werden, anstatt 2 (weil ich multiplizieren counter von 2 in die Math.pow Funktion).

Meine letzte Code sieht wie folgt aus:

public static int sumWithLoop (int inputNumber) 
{ 
    int result1 = 1; 
    int counter = 1; 

    while (counter < inputNumber) 
    { 
     result1 = result1 + (int) (Math.pow(1 + 2 * counter, 2)); 
     counter = counter + 1; 
    } 
    return result1; 
} 

Es 84 zurückkehrt, wenn inputNumber 4, 165, wenn es 5 ist, 286, wenn es 6 ist, usw., so dass es aussieht wie es funktioniert. Hoffe das half!


P.S. Just FYI, ich/Sie hätten result1 += (int) (Math.pow(1 + 2 * counter, 2)); in der ersten Zeile in der While-Schleife verwendet werden können. Der Unterschied ist der Operator + =, der der vorhergehenden Variablen den folgenden Wert hinzufügt. Es ist prägnanter als this = this + somethingMore;

Auch in der zweiten Zeile, wir counter++; verwendet haben könnten, statt counter = counter + 1;++ fügt man auf die Variable hat er verwendet, auf.

Verwandte Themen