Summe aller Natürlichen Zahlen - Methode Prüfen

anarcho-anton

Neues Mitglied
Hallo,
Ich bin Absoluter Programmier+Java Neuling.
Da an der Uni gerade die Infovorlesungen grottenschlecht sind fühle ich mich auf die Übungsblätter wirklich schlecht vorbereitet und muss wohl eher autodidaktisch an die ganze Sache herangehen.

Nun zu meinem Problem:
ich soll eine Methode schreiben, die die Summe aller Natürlicher Zahlen von 1 bis n berechnet.
Es ist auch eine Lösung wiefolgt angegeben:

Java:
public class Summe
static int calcSum(int n){
int sum = 0;
for(int i = 1; i <= n; i++) {
sum = sum + i;
}
return sum;
}

Die Methode leuchtet mir im Großen und ganzen schon ein, den Sinn von (return sum😉 verstehe ich aber nicht.
Nun soll ich diese Methode mithilfe einer main-Methode testen.
Ausgegeben hätte ich gerne etwas durch System.out.println("n: " + n + ", sum: " + calcSum(n));
Das ich auch noch i-wo "public static void main(String[] args){}" (was ja nunmal die main-methode ist) einfügen muss habe ich jetzt auch begriffen. Wo ich die beiden Zeilen aber nun sinnvoll einfüge Ergibt sich mir nicht. Ausserdem verstehe ich nicht wie ich hier für den parameter n eine Zahl einsetzen kann.
Als ich die Aufgabe zuerst selbst bearbeitet habe habe ich die mir Einleuchtende Methode
Java:
public class C {
	public static void main(String [] args)
	{
		int n = 5;
		{
		long sum = 0;
		
		for (int i =1; i <= n; i++) {sum = sum + i;}
		
		System.out.println("n: " + n + ", sum: " + sum);
}
}}
verfasst, die sogar funktioniert und wo ich einfach den parameter n verändern kann.
Ist diese methode i-wie schlecht oder wieso basteln die bei der Lösung so komplizierte Dinge mit ein?
Vielen Dank für Antworten!

Bei der Abgabe am Mittwoch werd ich auf jeden Fall durchfallen aber jetzt brauch ich erstmal einen Anpack an das ganze Thema..
 
Java:
public class Summe {
  static int calcSum(int n){
    int sum = 0;
    for(int i = 1; i <= n; i++) {
      sum = sum + i;
    }
    return sum;
  }
  public static void main(String[] args) {
    for (int i=1;i<20;i++) {
      System.out.println("n: " + i + ", sum: " + calcSum(i));
    }
  }
}

So ungefähr kannst du es machen.
Aber bevor du dich ins Programmieren stürzt, solltest du dir Grundlagen verschaffen. Es gibt genügend Anfänger-Bücher (z.B. Inselbuch).
P.S. Bei euch gibt es bestimmt auch Übungen und Tutorien zum Fach, wo man Fragen stellen kann (und wenn man etwas nicht versteht auch "muss")
 
Was verwirrt dich denn an der Musterlösung?

Mit return wird die Methode beendet und "sum" zurückgegeben. Die Methode spezifiziert, dass ein int zurückgegeben werden muss (sum ist ja ein int). Deine Methode spezifiziert (mittels "void"), dass nicht zurückgeben wird.
 
Noch einfacher ist (im wahrsten Sinne des Wortes) nach Adam Riese

sum =(n/2)*(n+1);

Warum das so ist, überlasse ich Dir 😀

Ansonsten: Lies Steppan: Einstieg in Java6 . Da wird sehr gut erklärt, was wohin gehört und wie man Klassen in eigene Dateien packt.
EDIT: Ups obiges gilt nur, wenn n gerade ist, ansonsten muss man noch was ergänzen.
 
Zuletzt bearbeitet:
Es ist zwar nach Carl Gauß und gilt auch für ungerade Zahlen, aber ist ok.

Mist, hatte Adam Riese in Erinnerung. Aber es gilt bei geraden Zahlen.

N=100
sum=100/2 * (100+1) =50 *101 = 5050 (Das war wohl die Originalaufgabe)

n ungerade: man reduziert auf n-1 (=gerade und addiert n dazu)

N=101
sum= 100/2*(100+1)+101=5151

EDIT: auch die Grundvariante funktioniert für gerade und ungerade Zahlen. ;-) Danke für den Link.
 
Zuletzt bearbeitet:
Öhm. hast du es schon mal mit ungeraden versucht?
Code:
n = 100
100/2*(100+1) = 50*101 = 5050

n = 101
101/2*(101+1) = 50,5*102 = 5151
Das Produkt von
Code:
n*(n+1)
ist definitiv durch 2 ganzzahlig teilbar, da einer der Zahlen durch 2 teilbar ist.
 
Öhm. hast du es schon mal mit ungeraden versucht?
Code:
n = 100
100/2*(100+1) = 50*101 = 5050

n = 101
101/2*(101+1) = 50,5*102 = 5151
Das Produkt von
Code:
n*(n+1)
ist definitiv durch 2 ganzzahlig teilbar, da einer der Zahlen durch 2 teilbar ist.

Hatte ich auch so in Erinnerung gehabt, das die Formel immer gilt. Ich war nur unsicher geworden. ;-)
 
Java:
public class Summe {
  static int calcSum(int n){
    int sum = 0;
    for(int i = 1; i <= n; i++) {
      sum = sum + i;
    }
    return sum;
  }
  public static void main(String[] args) {
    for (int i=1;i<20;i++) {
      System.out.println("n: " + i + ", sum: " + calcSum(i));
    }
  }
}

So ungefähr kannst du es machen.
Aber bevor du dich ins Programmieren stürzt, solltest du dir Grundlagen verschaffen. Es gibt genügend Anfänger-Bücher (z.B. Inselbuch).
P.S. Bei euch gibt es bestimmt auch Übungen und Tutorien zum Fach, wo man Fragen stellen kann (und wenn man etwas nicht versteht auch "muss")

Da müssten mir doch alle summen von 1 bis 19 in dem fall ausgegeben werden?
ich hab so bisschen das gefühl das der java kram ziemlich viel basteln und probieren ist..
morgen wird sich erstmal ein Buch bestellt.. danke für die antworten!
 
Da müssten mir doch alle summen von 1 bis 19 in dem fall ausgegeben werden?
ich hab so bisschen das gefühl das der java kram ziemlich viel basteln und probieren ist..
morgen wird sich erstmal ein Buch bestellt.. danke für die antworten!

Das mit dem Buch ist gerade für Einsteiger ein absolutes Muß.

ES ist am Anfang immer viel probieren. Das hat weniger was mit Java zu tun, als vielmehr mit dem Grundverständnis des Programmierens. Das dauert.

Und: Es gibt immer viele Wege zum Ziel. Saubere, effiziente, schöne und dumme. Man lernt durch Erfahrung.

Beispiel:

Deine For-nextschleife ist schön und man sieht die Aufgabe darin direkt umgesetzt. Jedoch bei n=10000000 wirst Du sehr lange warten, weil 2x10000000 Additionen und 10000000 Schleifenoperationen durchgeführt werden.

sum =(N*(n+1))/2 liefert ein blitzschnelles Ergebnis, da nur 3 Rechenoperationen durchgeführt werden. Dafür ist es aber nur sehr schwer verständlich, was da eigentlich berechnet wird. Darum sind auch Kommentare so immens wichtig im Quelltext.

Forschleifen sind nur bei einer geringen Anzahl an Durchläufen wirklich sinnvoll. Insbesondere geschachtelte For-Schleifen können endlos dauern.

Das alles lernt man nur durch probieren und gute Bücher. ;-)
 

Neue Themen


Zurück
Oben