Hallo Ich möchte bei der Methode Eingaben von der Tastatur abfragen und diese dann im Array speichern
Wenn der User Ende eingibt dann hört die Abfrageroutine auf
Wenn ich sofort Ende eingebe hört er auf. Wenn ich erst bei der 2. Abfrage Ende eingebe springt er wieder nach //System.out.println("Bitte geben Sie Ihre Frage ein.");// und gibt frägt wieder nach einer Eingabe
Wenn ich dann ende eingebe hört er auch auf
Auffällig ist das er 1.3.5. Eingabe immer sofort aufhört und bei 2.4.6 Eingabe erst nochmal eine Eingabe will
Kann mir da jemand helfen
Danke
Code:
public boolean InputOutput() throws IOException
{
//Einlesen von der Konsole und speichern in einen String
System.out.println("Bitte geben Sie Ihre Frage ein.");
String question = new BufferedReader(new InputStreamReader(System.in)).readLine();
if(question.equals("Ende"))
{
return false;
}
baseString[counter] = question;
System.out.println("Bitte geben Sie die Gewichtung der Frage ein.");
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
int emphasis = Integer.parseInt(din.readLine());
baseInt[counter] = emphasis;
counter++;
return true;
}
Auffällig ist das er 1.3.5. Eingabe immer sofort aufhört und bei 2.4.6 Eingabe erst nochmal eine Eingabe will
Kann mir da jemand helfen
Ich meinet damit , wenn ich bei der ersten Eingabe Ende eingebe bricht er die Methode sofort ab
Wenn ich ende bei der zweiten Abfrage eingebe dann beendet er nicht sofort sondern Fragt springt, keine Ahnung warum wieder zur Ausgabe System.out.println("Bitte geben Sie Ihre Frage ein."); und erwartet wieder eine Eingabe
Code:
import java.io.*;
public class test
{
public static void main(String[] args) throws IOException
{
Database a = new Database();
while(a.InputOutput() == true)
{
a.InputOutput();
}
a.printarray();
}
}
Code:
public boolean InputOutput() throws IOException
{
//Einlesen von der Konsole und speichern in einen String
System.out.println("Bitte geben Sie Ihre Frage ein.");
String question = new BufferedReader(new InputStreamReader(System.in)).readLine();
if(question.equals("Ende"))
{
return false;
}
baseString[counter] = question;
System.out.println("Bitte geben Sie die Gewichtung der Frage ein.");
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
int emphasis = Integer.parseInt(din.readLine());
baseInt[counter] = emphasis;
counter++;
return true;
}
Tja, bei der zweiten Abfrage prüfst du ja auch nicht auf "Ende" und gibst false zurück, falls es eingegeben wird. Daher kommt "true" zurück und daher wird diese Methode nochmal aufgerufen und erneut gefragt!
Eigentlich komisch, dass keine exception kommt, denn wenn du ende eingibst dann sollte das hier ein Problem ergeben
gibst du ende oder Ende ein ?
dann nimm lieber equalsIgnoreCase - da is es egal ob groß oder kleinschreibung....
ich würde dir empfehlen den BufferedReader in eine Variable zu schreiben und dann immer mit close am Ende schließen... meines Wissen kann es dem OS probleme bereiten wenn zuviele davon offen rumliegen...
Das hab ich jetzt nicht verstanden Manfred
Meinetwegen lasse ich die untere Eingabe weg
Trotzdem wird immer beim 2. 4. 6. Methodenaufruf nochmals trotz eingabe von "Ende"
die Abfrage nach der Frage gemacht, sprich
Bitte geben Sie Ihre Frage ein."
Ende Bricht sofort ab und gibt false zurück
Bitte geben Sie Ihre Frage ein."
blah
Bitte geben Sie Ihre Frage ein."
Ende Bricht nicht sofort ab und springt wieder zu System...
Bitte geben Sie Ihre Frage ein."
Code:
public boolean InputOutput() throws IOException
{
//Einlesen von der Konsole und speichern in einen String
System.out.println("Bitte geben Sie Ihre Frage ein.");
String question = new BufferedReader(new InputStreamReader(System.in)).readLine();
if(question.equals("Ende"))
{
return false;
}
baseString[counter] = question;
/**
System.out.println("Bitte geben Sie die Gewichtung der Frage ein.");
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
int emphasis = Integer.parseInt(din.readLine());
baseInt[counter] = emphasis;**/
counter++;
return true;
}
Gorß und kleinschreibung is nicht schuld daran aber gute Idee
Wie meinst du das. Kannst du mir ein Beispiel zeigen
ich würde dir empfehlen den BufferedReader in eine Variable zu schreiben und dann immer mit close am Ende schließen... meines Wissen kann es dem OS probleme bereiten wenn zuviele davon offen rumliegen...
du rufst die methode 2x auf.... nehmen wir an, du hast den Methodenaufruf in der while schleife... gibt der user dort ende ein passiert gar nix. die schleife wird erneut überprüft und das geschieht durch aufruf der methode.... also wird wieder gefragt !
möglichkeit:
Code:
while(a.InputOutput());
ich würde aber das ganze so machen:
Code:
public class Test {
public static void main(String[] args) throws IOException {
inputOutput();
}
public static void inputOutput() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String question = "";
while(!question.equalsIgnoreCase("Ende")) {
System.out.println( "Bitte geben Sie Ihre Frage ein." );
question = reader.readLine();
// mit question machen was du willst
System.out.println( "Bitte geben Sie die Gewichtung der Frage ein." );
int emphasis = Integer.parseInt(reader.readLine());
// mit emphasis machen was du willst
}
reader.close();
}
}
also. die Methode wird das erstmal deswegen aufgerufen:
Code:
while(a.InputOutput() == true)
man kann die eingaben machen und wenn dort der User ende eingibt wird aufgehört. Wenn nicht geht das programm in die while schleife.
Da steht
Code:
a.InputOutput();
- also wird die methode wieder aufgerufen. Wird nun Ende eingegeben passiert nix, weil du den rückgabewert nicht speicherst... er geht automatisch wieder in den Kopf der while schleife und tested die Bedingung - also wieder