exception abfangen

muloch

Grünschnabel
Hi,
ich habe eine methode geschrieben wo exception abgefangen werden für int variablen, sie sieht so aus:
static int abfrageInt(String prompt, BufferedReader in)
throws IOException
{
int zahl=0;
System.out.print(prompt);

boolean fertig = false;
do
{

try
{
zahl = Integer.parseInt(in.readLine());
fertig = true;
}
catch (NumberFormatException error)
{
System.out.println("Fehler, noch einmal\n");
System.out.print(prompt);
}
} while (!fertig);
return zahl;
}
}
Nun möchte ich eine methode für string variablen schreiben, ich komme da nicht weiter.

könnt ihr mir da helfen?
 
Da wirst du so auch kein Glück mit haben. Denn die Funktion readLine() liefert dir ja auf jedenfall einen String zurück.

Das einzige was du machen könntest, wenn es dir nur darum geht keine reine Zahlenreihe zurück zu bekommen, wäre zu testen ob du es in einen Integer umwandeln kannst und wenn ja ne Fehlermeldung zu bringen. Also genau das umgedrehte von dem was du schon hast.
Wobei natürlich normal auch eine reine Zahlenreihe ein gültiger String wäre...
 
hi
ich glaube dass ich mich nicht richtig ausgedrückt habe. das obige prog habe ich dafür geschreiben um eine NumberFormatException error abzufangen, um nur int werte schreiben zu können.
nun möchte ich eine IOException abfangen die bei string werten entsteht. kurz gesagt, ich schreibe ein vokabeltrainer, wo ich abfrage ob der bediener englisch-deutsch oder deutsch-englisch üben möchte indem der bediener ein "d" oder ein "e" drückt und diese eingabe möchte ich mit try catch abfangen, damit keine fehler meldung.
 
Sowas macht man doch mit einer if-Bedingung:

String input = in.readLine();

if (input.equals("d"))
tue_dies();
else if (input.equals("e"))
tue_das();
else tue_jenes();


Vg Erdal
 
Siehe flashrays Post... sowas kannst du nicht per Exception abfagen, weil niemals eine geworfen wird. Warum auch? Die Eingabe ist ja nun mal in jedem Fall ein String.

Höchstens um noch mal das Beispiel zu erweitern:

boolean fertig = false;
do {
String input = in.readLine();

if (input.equals("d")) {
System.out.println("Du lernst jetzt deutsch -> englisch");
fertig = true;
}
else if (input.equals("e")) {
System.out.println("Du lernst jetzt deutsch -> englisch");
fertig = true;
}
else {
System.out.println("Falsche Eingabe!");
}
} while (!fertig);

Anstelle von equals() könntest du auch noch equalsIgnoreCase() benutzen, dass is die Groß/Kleinschreibung auch noch egal.
 
hi,
vielen dank für eure hilfe, es hat mir sehr geholfen.
im java buch stand das readline() eine IOException auslöst und die mit try und catch abgefangen werden muss. deshalb war meine frage.
danke nochmal
 
Ich wollte jetzt kein neues Topic aufmachen, wegen meinem Problem. Und da es hier gut reinpasst, dachte ich mir, plaziere ich es hier.

Code:
package de.Vererbung.Firmenbsp;

import java.io.*;

public class Person throws IOException {

	// Eigenschaften
	private String vname, nname, alter1;
	File Datei1 = new File("datei.txt");
	FileWriter aus = new FileWriter(Datei1);

Ich stehe einfach vor dem Problem, das den Filewriter nicht bei den Eigenschaften festlegen kann. Denn wenn ich oben "throws IOException" angebe, meckert der Compiler auch. Nun hab ich bis jetzt das Problem so gelöst gehabt, das ich den Filewriter und alles andere in Funktion mit try - catch überwacht hab. Aber wenn ich Funktionen vererben und erweitern will, stehe ich wieder vor dem Problem.

Deswegen, meine Frage....Warum kann man den Code nicht so schreiben, wie oben. Ich verstehe hier den Fehler nicht.
 
Eine Klasse ist keine Methode und kann daher auch keine Exception werfen.

Du könntest das ganze im Konstruktor initialisieren:
Java:
public class Person  {

	  // Eigenschaften
	  private String vname, nname, alter1;
	  private File datei1;
	  private FileWriter aus;

	  public Person() throws IOException {
		  datei1 = new File("datei.txt");
		  aus = new FileWriter(datei1);
	  }	
 }
 
Code:
public class Person throws IOException {

	// Eigenschaften
	private String vname, nname, alter1;
	File Datei1 = new File("datei.txt");
	FileWriter aus = new FileWriter(Datei1);

hab jetzt gemerkt, das man es auch so schreiben kann, und man dann nur bei den Konstruktoren einfach das "throws IOException "dran hängen muss. Ist ja auch eigentlich logisch.
 
Zurück