Es handelt sich um ein Programm, bei dem per Tasteneingabe Objekte in alle Himmelsrichtungen verschoben werden können.
Hier die Main-Methode:
Die dazugehörige KeyboardIO
So, wenn ich die Zahlen 1,2,3,4,5,6,7,8,9 oder 0 eingebe, passiert das was passieren soll.
Wenn ich aber z.B. 10 eingebe, verschiebt sich das vorher gewählte Objekt nach z.B. nach rechts unten! Die eingabe 10 sollte aber doch eigentlich von break abgefangen werden, oder????????
HILFE!!!!!!!!!!!!!
Liebe Grüße
mics123
Hier die Main-Methode:
Code:
/*
public class Main
{
public static void main(String[] args)
{
// Objektlisten initialisieren
Objekt.init();
// Objekte hinzufuegen in die Objektlisten mit Koordinaten
Objekt.fuegeObjektHinzu(new Punkt(17,8));
Objekt.fuegeObjektHinzu(new Text(10,6));
Objekt.fuegeObjektHinzu(new Quadrat(20,10));
// Objektliste wird in umgekehrter Reihenfolge aufgerufen ...
Objekt.zeichneObjekte();
// ... und auf Screen ausgeben
Objekt.zeichneFenster();
boolean beenden = false;
int eingabe;
int deltaX = 0;
int deltaY = 0;
do
{
// Menüaufbau, Vorschleife wird bis "size" durchlaufen
System.out.println("Welches Objekt moechten Sie bewegen?");
System.out.println("************************************************************");
for(int i = 0; i < Objekt.objektliste2.size(); i++)
/* Objektliste von Objekt
get(i) Objekt an Stelle i, getClass Laufzeitklasse des Objektes getName Klassenname
Funktion --> damit Objektliste auf dem Bildschirm ausgegeben wird
*/
System.out.println((i+1) + ") " + Objekt.objektliste2.get(i).getClass().getName());
// Ausgabe von Beenden
System.out.println((Objekt.objektliste2.size()+1) + ") Beenden");
System.out.println("************************************************************");
System.out.print("Eingabe: ");
/* Einlesen der Benutzereingabe
out of range abfangen
*/
eingabe = KeyboardIO.readInt("Fehlerhafte Eingabe! 1,2,3 oder 4 erwartet.\nErneut versuchen: ");
// Eingabe out of range?
while(eingabe < 1 || eingabe > Objekt.objektliste2.size() + 1)
{
System.out.println("Fehlerhafte Eingabe! 1,2,3 oder 4 erwartet.\nErneut versuchen: ");
eingabe = KeyboardIO.readInt("Fehlerhafte Eingabe! 1,2,3 oder 4 erwartet.\nErneut versuchen: ");
}
if(eingabe == Objekt.objektliste2.size() + 1) // beenden?
beenden = true;
else
{
// nicht beenden?
Objekt objekt = (Objekt)Objekt.objektliste2.get(eingabe - 1); // objekt "bekommen"
// Fenster nochmal ausgeben
System.out.println("");
Objekt.zeichneObjekte();
Objekt.zeichneFenster();
/* Objekt bewegen und Menue aufbauen:
Die Steuerung wurde fuer das NumPad einer PC-Standardtastatur bzw. für das NumPad
(mit Hilfe der Funktionstasten) eines NBs optimiert. Da die Objekte auch
diagonal bewegt werden können, erschienen mir Steuerungen mit Buchstaben ungeeignet
und unübersichtlich.
*/
System.out.println("");
System.out.println("In welche Richtung soll das gewaehlte Objekt bewegt werden?");
System.out.println("***********************************************************");
System.out.println("7 (links oben) 8 (oben) 9 (rechts oben)");
System.out.println("4 (links) 6 (rechts)");
System.out.println("1 (links unten) 2 (unten) 3 (rechts unten)");
System.out.println("0 (zurueck zum Auswahlmenue)");
System.out.println("***********************************************************");
System.out.print("Eingabe: ");
// Einlesen der Benutzereingabe ... out of range abfangen
eingabe = KeyboardIO.readInt("Fehlerhafte Eingabe! 1,2,3,4,5,6,7,8,9 oder 0 erwartet.\nErneut versuchen: ");
switch(eingabe)
{
// Beenden bei 0 und weiter ...
case 0:
System.out.println("");
continue;
// Benutzer gibt "1" ein ...
case 1:
deltaY = 1; deltaX = -1;
break;
// usw.
case 2:
deltaY = 1; deltaX = 0;
break;
case 3:
deltaY = 1; deltaX = 1;
break;
case 4:
deltaY = 0; deltaX = -1;
break;
case 5:
deltaY = 0; deltaX = 0;
System.out.println("Sinn dieser Eingabe?");
break;
case 6:
deltaY = 0; deltaX = 1;
break;
case 7:
deltaY = -1; deltaX = -1;
break;
case 8:
deltaY = -1; deltaX = 0;
break;
case 9:
deltaY = -1; deltaX = 1;
break;
default:
System.out.println("Unsinnige Eingabe.");
break;
}
// es wird abegfragt, "ob´s passt" ... wenn nicht ...
if(!objekt.setzeKoord(deltaX, deltaY))
System.out.println("Nicht möglich ... Rand erreicht!\n");
// wenns passt ... Objekte und Fenster (in entsprechender Reihenfolge) ausgeben
else
{
Objekt.zeichneObjekte();
Objekt.zeichneFenster();
}
}
}
while(!beenden);
}
}
Die dazugehörige KeyboardIO
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// Die Klasse KeyboardIO dient dem Einlesen von Tastatur-Eingaben
public class KeyboardIO
{
/*
* Diese Methode liest die Eingabe der Tastatur und gibt diese als String benutzereingabe zurueck
*/
public static String readString()
{
// Hier wird ein BuffererdReader mit InputStreamReader mit System.in als Eingabe initialisiert
BufferedReader inputStream = new BufferedReader(new InputStreamReader(System.in));
try
{
// Eingabe einlesen
String eingabe = inputStream.readLine();
// und Eingabe zurückgeben
return eingabe;
}
// sollte nicht auftreten ... null zurückgeben
catch(IOException e)
{
return null;
}
}
/*
* Diese Methode liest die Eingabe der Tastatur und versucht sie als int zu interpretieren.
* Schlaegt dies fehl, wird die Fehlermeldung ausgegen und nochmals eine Eingabe erwartet,
* bis die Eingabe als int interpretiert werden kann.
*/
public static int readInt(String fehlermeldung)
{
// Eingabe des Benutzers
String eingabe;
// Zahl, die aus der benutzereingabe "geparsed" wird
int zahl;
// String einlesen
eingabe = readString();
if(eingabe != null)
{
try
{
// Umwandlung String --> int
zahl = Integer.parseInt(eingabe);
return zahl;
}
// Fehler bei Umwandlung String --> int
catch(NumberFormatException e)
{
System.err.println(fehlermeldung);
// Diese Methode wird rekursiv nochmal aufgerufen
return readInt(fehlermeldung);
}
} else // sollte nicht auftreten
return -1;
}
/*
* Diese Methode liest die Eingabe der Tastatur und versucht sie als float zu interpretieren.
* Schlaegt dies fehl, wird die Fehlermeldung ausgegen und nochmals eine Eingabe erwartet,
* bis die Eingabe als float interpretiert werden kann.
*/
public static double readDouble(String fehlermeldung)
{
// Eingabe des Benutzers
String eingabe;
// Zahl, die aus der benutzereingabe "geparsed" wird
double zahl;
// String einlesen
eingabe = readString();
if(eingabe != null)
{
try
{
// Umwandlung String --> double
zahl = Double.parseDouble(eingabe);
return zahl;
}
// Fehler bei Umwandlung String --> double
catch(NumberFormatException e)
{
System.err.println(fehlermeldung);
// Diese Methode wird rekursiv nochmal aufgerufen
return readDouble(fehlermeldung);
}
} else // sollte nicht auftreten
return -1;
}
}
So, wenn ich die Zahlen 1,2,3,4,5,6,7,8,9 oder 0 eingebe, passiert das was passieren soll.
Wenn ich aber z.B. 10 eingebe, verschiebt sich das vorher gewählte Objekt nach z.B. nach rechts unten! Die eingabe 10 sollte aber doch eigentlich von break abgefangen werden, oder????????
HILFE!!!!!!!!!!!!!
Liebe Grüße
mics123