class Asimov { public String promises(String name) { Java-Software wird in Paketen organisiert. Diese enthalten Um schnell mit dem Roboter anzufangen, eignet sich das return Klassen und Objekte mit deren Methoden man Probleme freie leJOS Betriebssystem für den NXT. Wer noch nicht mit name+" will not injure a human being\n"+ lösen kann. Standardmäßig ist das Paket java.lang Java vorher gearbeitet hat, dem sei hier ein schneller und name+" will obey any orders by human\n"+ importiert, in dem sich fundamentale Datentypen, Objekte kurzer Einblick in die Sprache gegeben um ohne große name+" will protect its own existence"; zur Fehlerbehandlung und zur Arbeit mit Verzögerung nach dem Einrichten des Systems, die ersten } Strings(StringBuilder) und mathematischen kleinen Programme auszuprobieren. Es wird angenommen, dass eine Java-Entwicklungs- Funktionen(Math) befinden. Ebenso ist die bereits public static void main(String[] args) { bekannte System-Klasse enthalten. umgebung bereits eingerichtet wurde. Ansonsten finden Asimov isaac = new Asimov(); sich diesbezüglich noch hilfreiche Links am Ende dieser System.out.println( Seite. // Asimov.java isaac.promises("Isaac")); Java verhält sich nicht exakt wie C, aber es können einige import lejos.nxt.*; } Konzepte, die in AuD gelernt wurden, übernommen class Asimov { } werden. Dazu werden hier verschiedene public void playStuff() { Beispielprogramme gezeigt und erklärt, die die meisten Sound.beepSequenceUp(); Konzepte enthalten, die notwendig sind für die ersten paar Ein Methodendeklaration public String Sound.buzz(); Bewegungen des Roboters. promises(String name) { … } besteht aus folgenden Sound.beepSequence(); Teilen: } Hello World! public damit die Methode von überall her public static void main(String[] args) { Im Hello World! Programm erkennt man, was alles aufrufbar ist Asimov isaac = new Asimov(); notwendig ist, um überhaupt eine Zeile Code ausführen zu Sound.setVolume(20); können. Es muss eine Klasse deklariert werden, die den String Rückgabetyp, Zeichenkette isaac.playStuff(); selben Namen trägt, wie die .java-Datei, in der sie promises Name der Methode Sound.setVolume(100); steckt(Zeile 2). Was Klassen sind, ist erstmal nicht wichtig. isaac.playStuff(); Zeile 3 zeigt die Deklaration der statischen main-Methode, (String name) Liste der Parameter, ein String } die als Anfang vom Programm gilt. Blöcke von Code } werden wie in C mit geschweiften Klammern umrahmt. { … } Code der beim Aufruf ausgeführt wird, // Asimov.java sieht die Argumente(name) und muss class Asimov { einen String zurück geben(return) Mit import lejos.nxt.* werden alle Klassen aus dem public static void main(String[] args) { Paket lejos.nxt importiert. Würde man lejos.nxt.* nicht Methoden sind Objekten zugeordnet und Objekte werden System.out.println("Hello World!"); importieren, könnte man die darin enthaltene Klasse Sound aus Klassen erstellt, die s.g. Instanzierung. Mit dem new- } nicht benutzen. Sound besitzt u.a. die statischen Methoden Operator wird ein neues Objekt aus einer Klasse } beep*, buzz und setVolume. Da diese Methoden mit dem instanziert. Dabei hat man die Möglichkeit noch einige Modifikator static statisch gemacht wurden, muss man Argumente anzugeben. new Asimov() erstellt ein neues Sound nicht erst instanzieren, so wie wir es mit new Sinn und Zweck von void main(String[] args) kann Objekt von der Klasse/vom Typ Asimov ohne weitere Asimov() machen. man sich mit ein wenig C Wissen herleiten. Eine Funktion Argumente. Dieses Objekt wird in der Variablen isaac vom mit dem Namen main, ohne Rückgabewert(void) und mit Typ Asimov gespeichert. einem Parameter args vom Typ String-Array. Weiterführende Informationen Die Methode promises kann dann auf dem Objekt isaac aufgerufen werden. Dem Parameter String name http://www.eclipse.org/ Methodenaufruf übergeben wir die Zeichenkette "Isaac". Der – – http://lejos.sourceforge.net/nxj.php Rückgabewert wiederum ist Argument für die Methode – http://java.sun.com/docs/books/tutorial/getStarted Methodenaufrufe verfolgen einen ähnlichen Zweck wie println auf dem Objekt out, die letztendlich die /application/index.html Funktionsaufrufe in C. Sie dienen der Mehrfach- Zeichenkette ausgibt. Besonders daran ist noch, dass out – http://lejos.sourceforge.net/nxt/nxj/api/index.html verwendung von Code. sich in einem anderen Namensraum/Namespace aufhält, – http://java.sun.com/docs/books/tutorial/java/nutsa nämlich im System-Namespace. ndbolts/index.html Variablendefinitionen switch (direction) { case 0: moveLeft(); int x; break; int y = 42; // Ganzzahlen case 1: float z = 2.3; // Gleitkommazahlen moveForward(); String name = "Asimov"; // Text break; TouchSensor ts = new TouchSensor(SensorPort.S1); case 2: // ein neues Objekt, das einen moveRight(); // Drucksensor auf Port 1 repräsentiert break; Motor leftMotor = Motor.A; case 3: stop(); class Asimov { break; … } // objektweite Variablendefinition Motor leftMotor; Schleifen int x = 42; … while (!Button.ENTER.isPressed()) { void foo() { stayingAlive(); … } int i, x = 23; // lokale Variablendefinition x == 42 // Falsch, x ist 23 int i = 0; this.x == 42 // Richtig, this.x do { // meint ein nicht lokales x Sound.beep(); … i++; } } while(i < 10); } Operatoren for (int j = 0; j < 5; j++) { Sound.twoBeeps(); } int x = 2 + 3 - 4 * 5 / 6 % 7; // 2 float y = 2.2 + 3.3 - 4.4 * 5.5; // -18.70… Anlaufpunkte bei Fragen String forename = "Isaac"; String surname = "Asimov"; Deine Teammitglieder! String name = forename + surname; Die API Dokumentation von leJOS // "Isaac Asimov" http://lejos.sourceforge.net/nxt/nxj/api/index.html float distance = Math.sqrt(x*x + y*y); // 18.80… Das dazugehörige Tutorial und der enthaltene Beispielcode boolean near = distance <= 20; // true http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm boolean far = !near; // false Die allgemeine Java Hilfe boolean panic = near && far; // false http://java.sun.com/docs/books/tutorial/java/TOC.html boolean dontcare= near || far; // true Deine liebste Suchmaschine Verzweigungen und Fallunterscheidungen http://www.scroogle.org/cgi-bin/scraper.htm Und natürlich: dein Tutor! ;-) if (light_value >= 75) { leJOS kompilieren auf der Kommandozeile moveFaster(); else { $ nxjc Asimov.java *.java moveSlower(); $ nxjlink Asimov -o Asimov.nxj } $ nxjupload Asimov.nxj if (ultrasonic_distance < 50) { pilot.stop(); }