würde das funktinoieren?
static int xyhoch (int x,y)
this.x = x^2;
this.y = y ^2;
return x;
return y;
static int xyhoch (int x,y)
this.x = x^2;
this.y = y ^2;
return x;
return y;
Zuletzt bearbeitet:
Habe die Aufgabe aus einem Lehrbuch, die wollen das man in jede Zeile auskomentiert hab aber die Lösung nicht mehr weiß das keiner ?
public static void main(String[] args) {
/*
* das Programm startet immer in der Main-Methode, durch static kann
* auf die Methode zugegriffen werden ohne eine Instanz der Klasse zu erstellen.
* Beispiele dafür sind z.B. die Math - Methoden.
* Du kannst Methoden wie die Wurzel (Math.sqrt()) einfach aufrufen ohne vorher
* sowas zu machen Math matheObjekt = new Math();
* und dann matheObjekt.sqrt().
*
* In der main Methode mit diesem Kopf wie hier startet immer das Java-Programm.
*/
//Wir Nehmen uns erstmal zwei zahlen
//Am Anfang ist das einfacher als Konsoleninputs, da man schnell an
//Testwerte kommt ohne sich um Eingaben zu kümmern.
int basis = 2;
int exponent = 4;
//Hier speichern wir den Rückgabewert der Funktion (mehr dazu unten)
int xyz = potenziere(basis,exponent);
//Das hier ist der einfache Ausgabebefehl (bekannt aus z.B. Hello-World)
//für die Java-Konsole.
System.out.println(xyz);
//In unserem Beispiel wäre die Ausgabe 16 was (2*2*2*2) = 16 entspricht.
//Hier ein paar weitere Beispiele, etwas kürzer gefasst (wir sparen uns das zwischenspeichern
//vor der Ausgabe und rufen die funktion direkt mit werten auf)
System.out.println(potenziere(2,2));
System.out.println(potenziere(5,2));
System.out.println(potenziere(3,3));
System.out.println(potenziere(0,0));
System.out.println(potenziere(4,0));
}
/*Das wird jetzt die Methode die aufgerufen wird wenn du die Potenz berechnen willst.
* Die Methode ist public (Sichtbarkeit bitte selbst nachschlagen), static (siehe oben)
* Int bedeutet,dass das Ergebnis der Methode ein int ist.
* int b und int e sind parameter die ich der Methode beim Aufruf übergeben kann
* (also Platzhalter), zum Aufruf siehe Oben.
*/
public static int potenziere(int b, int e){
//Am Anfang der Funktion fängt man in der Regel spezialfälle ab.
//Wenn der exponent 0 ist gibt die Potenz immer 1 (sollte ich mich
//irren Asche auf mein von Unimathe geplagtes Haupt :D)
if(e == 0){
//Wenn e gleich 0 ist (doppeltes =) geben wir 1 weiter
//Ansonsten überspringen wir den Teil
return 1;
}
//wir kopieren uns zuerst mal b,
//damit haben wir es leichter uns b und das Ergebnis zu merken
int result = b;
//Hier kommt die Schleife zum Rechnen ins Spiel.
//Als Text übersetzt heißt die Stelle hier:
//Fange mit einem Wert int i = 1 an, solange i kleiner als e ist machst du alles
//Was in den {} steht und erhöhst dannach i um 1. Dann fängst du wieder von vorne an.
//Angenommen e wäre 2. dann müsstest du b*b rechnen.
//i ist erst 1, 1 ist kleiner als 2, also wird result (das ja schon b enthält) mal b
//genommen und in result steht b*b. Jetzt wird i erhöht und ist 2.
//e war aber auch 2, also stimmt die Schleifenbedingung 2 < 2 nicht mehr, die Schleife wird verlassen
for(int i = 1; i < e; i++){
result = result*b; //alternativschreibweise: result *= b;
}
//Am Ende geben wir den in result gespeicherten Wert zurück
return result;
}
Schreib in C 6 "*" hin und du wirst deutlich schneller fertig sein als mit einem beliebigen Algorithums in Java - den lezten Rest an Performance in C rauszuholen ist etwa wie wenn du deinen Golf tunst um gegen einen BMW535 anzutreten ...
Bei der einfachen und langsamen Potenzierung von xc werden (c − 1) Multiplikationen benötigt. Beim „Square & Multiply“ wird die Schleife lediglich log2(c)-mal durchlaufen (log2(c) entspricht hierbei ungefähr der Länge der Zahl c in der Binärdarstellung). In jedem Schleifendurchlauf kommt es zu einer Quadrierung (wobei die erste Quadrierung vernachlässigt werden kann) und eventuell einer Multiplikation. Asymptotisch werden O(log(c)) Operationen (eventuell Langzahloperationen) benötigt, wogegen O(c) Operationen bei der einfachen Potenzierung zu Buche schlagen. O bezeichnet eine asymptotische obere Schranke für das Laufzeitverhalten des Algorithmus. Wie man leicht einsieht, ist das „Square-&-Multiply“-Verfahren sehr viel effizienter als das einfache Verfahren. Dieser verringerte Anspruch an die Rechenleistung ist bei großen Basen und Exponenten enorm.