Benutzer:Ernst Schreier/testbereich
Inhaltsverzeichnis
gelöschte Kapitel
Versteckspiel
{{Idee| Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer for-Schleife realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.
- Versteckspiel
- Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen. Erst dann darf man zum Suchen aufbrechen.
Dieses simple Spiel ist ein einfacher Algorithmus:
VERSTECKSPIELZÄHLUNG Die erste Zahl ist 1. Prüfe, ob die 100 erreicht wurde Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins. Wenn doch, dann rufe „Ich komme“
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt ("prechecked loop", "kopfgesteuerte Schleife").
- Solange <Bedingung erfüllt> führe <Anweisung> aus.
- Java-Syntax
while (Bedingung)
{
Anweisungsblock (was soll wiederholt werden?)
}
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.
- Hinweis
- Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.
public class Verstecken
{
public void zaehleBisZahlundRufe(int zahl)
{
int x; // Eine Zählvariable x
x=1; // Anfangswert für x
while (x <= zahl) {
System.out.println (x); // schreibe x auf die Konsole
x++; // erhöhe x um 1
}
System.out.println ("Ich komme...!");
}
}
Das folgende Beispiel eignet sich, um eine verschachtelte if..else-Verzweigung einzuführen. Neben „if..else“ benötigen Sie Kenntnisse im Umgang mit System.out.println und der Klasse Math, die in Java standardmäßig vorhanden ist.
Die Klasse Math ist das Matheobjekt mit allen Operationen für einfache numerische Berechnungen.(...) Der Ergebnistyp fast aller Operationen ist double
.
sqrt
: Wurzelziehenpow
: Potenzen
double x = Math.sqrt( 2 ); doulbe y = Math.pow( 2,10 ); // 2^10 = 1024
public class Formelberechner
{
public String berechnePQFormel(double pP, double pQ){
double diskriminante;
diskriminante = (pP/2) * (pP/2) - pQ;
if (diskriminante >= 0) {
double x1,x2;
x1 = -(pP/2) + Math.sqrt (diskriminante);
x2 = -(pP/2) - Math.sqrt (diskriminante);
if (x1==x2){
return "Das Ergebnis ist L={"+x2+"}";
}
else {
return "Die Ergebnisse sind L={"+x1+";"+x2+"}";
}
}
else {
return "Keine Lösung, die Diskriminate ist "+diskriminante;
}
}
verbesserte Version
Hallo zusammen,
ich habe selbst ein solches Beispiel gebraucht und das aktive etwas umgebaut (Trennung von Berechnung und Texterstellung, Verwendung von StringBuilder zur Erstellung der Ergebnistexte). Die verschachtelte if Bedingung ist nun in der Funktion ergebnisText(...). Sieht noch jemand einen Fehler? Danke und Gruss --Axel Gruenhagen 10:55, 30. Aug. 2009 (UTC)
public class FormelberechnerNeu {
public String berechnePQFormel(double pP, double pQ) {
double pPhalbe = pP / 2;
double diskriminante = Math.pow(pPhalbe,2) - pQ;
double x1 = 0;
double x2 = 0;
if (diskriminante >= 0) {
double sqrtDiskriminante = Math.sqrt(diskriminante);
x1 = -(pPhalbe) + sqrtDiskriminante;
x2 = -(pPhalbe) - sqrtDiskriminante;
}
return ergebnisText(x1, x2, diskriminante);
}
private String ergebnisText(double x1, double x2, double diskriminante) {
StringBuilder ergebnisText = new StringBuilder();
if (diskriminante >= 0) {
if (x1 == x2) {
ergebnisText.append("Das Ergebnis ist L={");
ergebnisText.append(x2);
} else {
ergebnisText.append("Die Ergebnisse sind L={");
ergebnisText.append(x1);
ergebnisText.append(";");
ergebnisText.append(x2);
}
ergebnisText.append("}");
} else {
ergebnisText.append("Keine Lösung, die Diskriminante ist ");
ergebnisText.append(diskriminante);
}
return ergebnisText.toString();
}
}
Siehe auch
- PQ-Formel
- Mathematischer Hintergrund: Quadratische Funktionen