Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^
Java:
private static Animal reader() throws IOException {
Scanner oScan = new Scanner(new File(oDatei));
Animal oGetIn = null;
Birthday oDate = new Birthday();
String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();
while(oScan.hasNext()){
if (sName.equalsIgnoreCase("Katze")) {
oGetIn = new Cat();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Hund")) {
oGetIn = new Dog();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Maus")) {
oGetIn = new Mouse();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
}
oScan.close();
return oGetIn;
}
In deiner while Schleife rufst du nirgends nochmal oScan.next() auf. Wenn die Schleife also einmal betreten wird (weil es noch nen Token gibt), dann wird sich an der Tatsache auch nichts mehr ändern.
soweit wie ich das sehe, geht er in die while-schleife rein, da noch etwas im Scanner rumliegt, aber du liest nie weitere Sachen mittels #next aus, daher wird es immer ein "hasNext" geben.
In Zeile 5 rufst Du drei mal next auf. D.h. Du hast schonmal drei Werte wech. Wenn Dir diese drei Werte reichen, brauchst Du auf dem Scanner garnix mehr aufzurufen. Ansonsten muss innerhalb der while-Schleife irgendwo ein nextXXX stehen, um die weiteren Werte auch einzulesen. Im Moment forderst Du den Nutzer zwar zu einer Neueingabe auf, holst sie Dir dann aber nirgends.
hab ich gemacht jetzt liest er gar nix mehr...
ich lese das ja von einer erstellten text datei aus die selbst in meinem programm erstelt wirt und in der datei ist mom nur 2 katzen und ein hund drinnen kann es deswegen sein?
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^
Java:
private static Animal reader() throws IOException {
Scanner oScan = new Scanner(new File(oDatei));
Animal oGetIn = null;
Birthday oDate = new Birthday();
String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();
while(oScan.hasNext()){
// IN DIESER SCHLEIFE RUFST DU NIEMALS oScan.next() AUF
// ERGO GIBT ES IMMER NOCH WAS UND DAS IST DIE ENDLOSSSCHLEIFE !
}
oScan.close();
return oGetIn;
}
Ich hab mal wieder ein Problem-.-
Ich bekomme eine endlos schleife könnt ihr mir helfen?
danke fürs lesen^^
Java:
private static Animal reader() throws IOException {
Scanner oScan = new Scanner(new File(oDatei));
Animal oGetIn = null;
Birthday oDate = new Birthday();
// meinst du vielleicht das ???
while(oScan.hasNext()){
String sName = oScan.next(), sNickname = oScan.next(), sDate = oScan.next();
if (sName.equalsIgnoreCase("Katze")) {
oGetIn = new Cat();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Hund")) {
oGetIn = new Dog();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Maus")) {
oGetIn = new Mouse();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
}
oScan.close();
return oGetIn;
}
wenn nur 3 datensätze drin stehen, zeige doch bitte mal den inhalt der datei .. im prinzip vermute ich gerade musst du nur nochmal sowas machen innerhalb der while-schleife (ohne berücksichtung von Fehlkonstellationen)
Java:
String sName;
String sNickname;
String sDate;
while (oScan.hasNext()) {
sName = oScan.next();
sNickname = oScan.next();
sDate = oScan.next();
//alles wie bisher
} //while
edit²: gut dann schau dir mal Beitrag #11 und #12 an, dann solltest der Lösung schon näher kommen!
Du liest momentan nur einen Datensatz aus, verarbeitest den in der Schleife. Nun musst aber auch die anderen Daten auslesen, sonst is eben immer noch etwas nicht-verarbeitetes im Scanner enthalten!
private static Animal reader() throws IOException {
Scanner oScan = new Scanner(new File(oDatei));
Animal oGetIn = null;
Birthday oDate = new Birthday();
String sName, sNickname, sDate;
while (oScan.hasNext()) {
sName = oScan.next();
sNickname = oScan.next();
sDate = oScan.next();
if (sName.equalsIgnoreCase("Katze")) {
oGetIn = new Cat();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Hund")) {
oGetIn = new Dog();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
if (sName.equalsIgnoreCase("Maus")) {
oGetIn = new Mouse();
zoo.add(oGetIn);
oGetIn.setNickname(sNickname);
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
}
}
return oGetIn;
}
wenn ich schon dabei bin da gefällt mir noch etwas nicht an meinem code hättet ihr ein beispiel wie ich das ändere da ja hier eh nicht geprüft wird ob die syntax richtig ist.
Java:
if (!oDate.checkSyntax(sDate)) {
System.err.println("Bitte geben Sie erneut das Datum ein!");
}
oGetIn.setBd(oDate);
ach hab schon eine lösung die zwar auch nicht so toll ist aber wenigstens sieht es besser aus.