// Code um Turtle Bibliothek zu importieren, welche wir im Folgenden nutzen
%mavenRepo bintray https://dl.bintray.com/egp/maven
%maven ch.unibas.informatik:jturtle:0.5
import ch.unibas.informatik.jturtle.Turtle;
Turtle turtle = new Turtle();
turtle.home();
turtle.clear();
turtle.penDown();
int lengthLegs = 100;
turtle.forward(lengthLegs);
turtle.turnRight(90);
turtle.forward(lengthLegs);
turtle.turnRight(135);
turtle.forward(Math.sqrt(lengthLegs * lengthLegs + lengthLegs * lengthLegs)) ;
turtle.turnRight(90);
display(turtle.toImage());
static void doSomething() { // Methodenkopf
statement1;
... // Methodenrumpf
statmentN;
}
doSomething()
Turtle turtle = new Turtle();
static void drawRightAngledTriangle() {
turtle.home();
turtle.clear();
turtle.penDown();
int lengthLegs = 100;
turtle.forward(lengthLegs);
turtle.turnRight(90);
turtle.forward(lengthLegs);
turtle.turnRight(135);
turtle.forward(Math.sqrt(lengthLegs * lengthLegs + lengthLegs * lengthLegs)) ;
turtle.turnRight(90);
display(turtle.toImage());
}
drawRightAngledTriangle();
drawRightAngledTriangle();
class MyClass {
static void method1() {
// Implementation
}
static void method2() {
// Implementation
}
}
Jupyter-Notebooks und die JShell fügen den Klassenkontext implizit dazu.
Werte, die vom Rufer an die Methode übergeben werden
static void printMax(int a, int b) {
if (a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
a
und b
(im Methodenkopf) sind formale ParameterMethode kann mit entsprechenden Werten aufgerufen werden
int i = 5;
...
printMax(11, i * 2)
11
und i
sind aktuelle ParametersetPos
welches die Turtleposition setzt und nutzen Sie diese im ProgrammTurtle turtle = new Turtle();
static void drawRightAngledTriangle(int lengthLegs) {
turtle.home();
turtle.clear();
turtle.penDown();
turtle.forward(lengthLegs);
turtle.turnRight(90);
turtle.forward(lengthLegs);
turtle.turnRight(135);
turtle.forward(Math.sqrt(lengthLegs * lengthLegs + lengthLegs * lengthLegs)) ;
turtle.turnRight(90);
display(turtle.toImage());
};
drawRightAngledTriangle(100);
Methoden, die Ergebniswerte an den Rufer liefern
static int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
void
in Methodenkopfreturn
Schlüsselwort um Wert zurückzugeben.int x = max(5, 3)
int y = System.out.println(max(5, 3));
if (max(a, b) == a) {
System.out.println("a > b");
} else {
System.out.println("b > a");
}
```
Turtle turtle = new Turtle();
static double computeHypothenuse(double a, double b) {
return Math.sqrt(a * a + b * b);
}
static void drawRightAngledTriangle(int lengthLegs) {
turtle.home();
turtle.clear();
turtle.penDown();
turtle.forward(lengthLegs);
turtle.turnRight(90);
turtle.forward(lengthLegs);
turtle.turnRight(135);
turtle.forward(computeHypothenuse(lengthLegs, lengthLegs));
turtle.turnRight(90);
display(turtle.toImage());
};
drawRightAngledTriangle(100);
class C {
static int a;
static void p() {
int x;
}
static void q() {
int y;
}
}
a
ist eine statische Variable, welche in jeder Methode der Klasse sichtbar ist.x
und y
sind lokale Variablen.class C {
static int a;
static void p() {
int x;
}
static void q() {
System.out.println(a);
int y;
}
}
class Sample {
static int x = 0;
static void P() {
System.out. println( x);
}
static void experiment() {
System.out. println( x);
//int x = 1;
System.out. println( x);
P();
if (x > 0) {
int x;
int y;
} else {
int y;
}
// for (int i = 0; i < 5; i++) { System.out.println(i); }
// for (int i = 1; i < 5; i++) { System.out.println(i); }
}
}
Sample.experiment();
void f(int i) {
f(i);
}
f(5);
Eine Methode m()
heisst rekursiv, wenn sie sich selbst aufruft;
Direkt rekursiv:
public void m() {
m ();
}
Indirekt rekursiv:
public void m() {
n();
}
public void n() {
m();
}
// Implementation
static int factorial(int n) {
System.out.println(n);
if (n == 1) {
return 1;
}
return factorial(n - 1) * n;
}
factorial(4);
// Implementation
static void drawSierpinskiRec(Turtle turtle, double length, int depth) {
if (depth==0){
for (int i = 0; i < 3; i++) {
turtle.forward(length);
turtle.turnLeft(120);
}
}
else {
drawSierpinskiRec(turtle, length/2.0 , depth-1);
turtle.forward(length/2);
drawSierpinskiRec(turtle, length/2.0, depth-1);
turtle.backward(length/2);
turtle.turnLeft(60);
turtle.forward(length/2);
turtle.turnRight(60);
drawSierpinskiRec(turtle, length/2.0,depth-1);
turtle.turnLeft(60);
turtle.backward(length/2);
turtle.turnRight(60);
}
}
static void drawSierpinski(double length, int depth) {
Turtle turtle = new Turtle();
turtle.home();
turtle.penDown();
drawSierpinskiRec(turtle, length, depth);
display(turtle.toImage());
}
drawSierpinski(150.0, 8)
binarylog
und ggt
, die in der Einführungsvorlesung (Slides: Informatik-Grundlagen) besprochen wurden als Methoden hinstatic void reduce(int z, int n)
, die mithilfe der Methode ggt
den Bruch $\frac{z}{n}$ kürzt und den gekürzten Bruch ausgibt.area
, welche für ein Dreieck mit gegebener Seitenlängea
, b
und c
, die Fläche berechnetstatic int binaryLog(int n) {
int i = 0;
while (n > 1) {
i += 1;
n = n / 2;
}
return i;
}
binaryLog(3);
1
static int ggt(int a, int b) {
int rest = a % b;
while (rest != 0) {
a = b;
b = rest;
rest = a % b;
}
return b;
}
3
static void reduce(int z, int n) {
int ggt = ggt(z, n);
System.out.println((z / ggt) +"/" + (n / ggt));
}
reduce(16, 8);
2/1
static double area(double a, double b, double c) {
// siehe https://en.wikipedia.org/wiki/Heron's_formula
double s = (a + b + c) / 2.0;
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
}
area(4, 13, 15);
24.0