Exception

evil

Aktives Mitglied
Hallo ihr lieben!

Ich habe eine Frage zu Exception und zwar, soll in der Kommandozeile eine int Zahl übergeben werden, dann gibt es 3 Möglichkeiten (Richtige Eingabe, Zahl zu klein, keine Eingabe). 2 catch-Anweisungen habe ich hinbekommen, nun weiß ich aber nicht, was für eine Exception ich nutzen muss, damit ich die richtige Ausgabe bekomme, wenn KEINE Eingabe gemacht wurde. Google und Su-fu haben mir auch nicht weiter geholfen.

Danke im Vorraus
 

Schumi

Bekanntes Mitglied
Du kannst doch den gleichen Exceptiontyp benutzen und den Fehlertext differneziert setzen. Oder soll sich das anschließende Verhalten auch Abhängig des Fehlers ändern?
 

Sergeant_Pepper

Bekanntes Mitglied
Hi,
es wäre erstens hilfreich, wenn du den vorhandenen Java-Code hier posten würdest (mit [noparse]
Code:
[/noparse] package ... usw. [noparse]
[/noparse]).

Zweitens vorab: du kannst eine eigene Exception anlegen (die von einer der Klassen Exception oder RuntimeException erbt), und diese dann mit throw in der Methode werfen, in der du auch die bisherigen Exceptions wirfst.
 

evil

Aktives Mitglied
Es soll je nach Typ eine andere Fehlermeldung ausgegeben werden.
Ich hatte es bisher so:

Java:
catch (EOFException e) {
      System.out.println("Kommandozeilenparameter fehlt");
      System.out.println("Korrekter Aufruf: C <zahl>");
    }
    catch (NumberFormatException e) {
      System.out.println("Kommandozeilenparameter muss eine Zahl sein");
      System.out.println("Korrekter Aufruf: C <zahl>");
    
    }
    catch (Exception e) {
      System.out.print("Die Zahl muss groesser sein");
    }

Aber das schent nicht ganz richtig zu sein, geb ich nämlich nichts ein, wird "Die Zahl muss groesser sein" ausgegeben.
 

evil

Aktives Mitglied
Java:
import java.io.*;

class C {
  public static void main(String[] args) throws IOException{
  BufferedOutputStream bos = new BufferedOutputStream(
                               new FileOutputStream("a.dat"));
    try {    	   
      byte[] b = new byte[Integer.parseInt(args[0])];
      for (int i = 0; i < b.length; ++i) {
    	b[i] = (byte) (Math.random() * 10);
      }
      bos.write(b, 5, 20);
    }
    catch (EOFException e) {
      System.out.println("Kommandozeilenparameter fehlt");
      System.out.println("Korrekter Aufruf: C <zahl>");
    }
    catch (NumberFormatException e) {
      System.out.println("Kommandozeilenparameter muss eine Zahl sein");
      System.out.println("Korrekter Aufruf: C <zahl>");
    
    }
    catch (Exception e) {
      System.out.print("Die Zahl muss groesser sein");
    }
 
    	    
    bos.close();
  }
}
 

Sergeant_Pepper

Bekanntes Mitglied
Ich habe eine Frage zu Exception und zwar, soll in der Kommandozeile eine int Zahl übergeben werden, dann gibt es 3 Möglichkeiten (Richtige Eingabe, Zahl zu klein, keine Eingabe).
vielleicht stehe ich gerade auf dem Schlauch, aber ich verstehe nicht, was dein Programm mit dieser Beschreibung zu tun hat.

Also: du legst ein [c]byte[][/c] an, dessen Größe vom Komandozeilen-Parameter abhängt. OK.
Damit das Sinn macht sollte die Zahl schon größer als 0 sein. Wo wird das geprüft? Nirgends ...
 

evil

Aktives Mitglied
Mh klingt logisch, aber leider weiß ich nicht so recht, wo ich die Prüfung machen soll.. Weil in der EOFException hat das ja wenig Sinn. Und davor wird das ja für alle Anweisungen geprüft

Das Programm war teilweise vorgegeben, man soll halt verschiedene Eingaben in die Kommandozeile machen und die verschiedenen Fehlermeldungen ausgeben (Übung für Exceptions --> Java Anfänger)
 
Zuletzt bearbeitet:

Sergeant_Pepper

Bekanntes Mitglied
Du willst also prüfen, ob die Eingabe größer ist als 25? Dann tu das doch ...

Statt
[c]byte[] b = new byte[Integer.parseInt(args[0])];[/c]
schreibst du
Code:
int groesse=Integer.parseInt(args[0]);
if (groesse<25)
{
	System.out.println("zu klein");
        System.exit(1);
}
byte[] b = new byte[groesse];
Und an Stelle von [c]System.exit(1);[/c] erzeugst du eine neue Exception

EDIT: du hast die EOFException nicht richtig verstanden. Jedenfalls passen die Sysout-Meldungen inhaltlich nicht zu dieser Exception.
 
Zuletzt bearbeitet:

evil

Aktives Mitglied
Java:
byte[] b = new byte[Integer.parseInt(args[0])];
leider ist gerade diese Zeile vorgegeben. Daher bringt mir das nicht viel :bahnhof: :oops:

Kann ich da irgendwie sagen
Java:
if (b[i] < 0) { ... }
 
Zuletzt bearbeitet:

Sergeant_Pepper

Bekanntes Mitglied
Java:
byte[] b = new byte[Integer.parseInt(args[0])];
leider ist gerade diese Zeile vorgegeben. Daher bringt mir das nicht viel :bahnhof: :oops:
bist du sicher dass die so bleiben MUSS ?

Wenn ja, dann schreibst du eben:
Code:
if (b.length<25)

Kann ich da irgendwie sagen
Java:
if (b[i] < 0) { ... }
Damit prüfst du doch nur den Inhalt eines einzelnen Elements und nicht die Größe des byte[]
 

Sergeant_Pepper

Bekanntes Mitglied
Vielleicht mal etwas allgemeiner: bevor du Exceptions erzeugen kannst, abhängig von bestimmten Zuständen, musst du verstanden haben, was das Programm macht.

Weißt du, was diese Zeilen machen sollen?
Code:
byte[] b = new byte[Integer.parseInt(args[0])];
for (int i = 0; i < b.length; ++i)
{
        b[i] = (byte) (Math.random() * 10);
}
bos.write(b, 5, 20);
 

evil

Aktives Mitglied
Achso, stimmt.

Jetzt bekomm ich aber eine Fehlermeldung. Ich habe nun die if-Schleife so gesetzt:
Java:
catch (EOFException e) {
      if (b.length<25) {
        System.out.println("Kommandozeilenparameter fehlt");
    	System.out.println("Korrekter Aufruf: C <zahl>");
      }
    }

Und bekomme die Fehlermeldung: Exception in thread “main” java.lang.ArrayIndexOutOfBoundsExceptions: 0 at C.main(C.java:8)

Sorry, wenn es doofe Fragen sind.. Aber aus Fehlern lernt man :)


Dort wird doch ein byte erzeugt und als int-Zahl dargestellt, danach als Zufallszahl in eine Datei geschrieben?!
 
Zuletzt bearbeitet:

evil

Aktives Mitglied
Da bekomm ich doch noch mehr Fehlermeldungen :(

Im try-Block wird doch die Anweisung ausgeführt und der Fehler wird dann an die "passende" catch-Anweisung zugewiesen. Also hier wird die Zahl "verarbeitet" und an die catch-Anweisung übergeben
 

Sergeant_Pepper

Bekanntes Mitglied
ich habe keine Ahnung, in welcher Weise du die Aufgabe lösen sollst...

Sollst du eine eigene Exception werfen, wenn die eingebene Zahl kleiner als 25 ist?
 

evil

Aktives Mitglied
Achso, ich dachte das wäre deutlich genug gewesen.
Java:
import java.io.*;

class A {

  public static void main(String[] args) {
    BufferedOutputStream bos = new BufferedOutputStream("a.dat");
    byte[] b = new byte[Integer.parseInt(args[0])];
    for (int i = 0; i < b.length; ++i) {
      b[i] = (byte) (Math.random() * 10);
    
    bos.write(b, 5, 20);
    }
    bos.close();
  }

}

Dieser Code ist vorgegeben. nun soll man diese Klasse so korrigieren, dass sie fehlerfrei läuft und bei verschiedenen Eingaben verschiedene Fehlermeldungen ausgegeben werden.

Zb: %java C
Kommandozeilenparameter fehlt

%java C ahf
Kommandozeilenparameter muss eine Zahl sein


Java:
NumberFormatException e
habe ich zum Beispiel gefunden (in der Java Dokumentation) und da dachte ich, es gibt sowas auch, wenn man keine Parameter in der kommandozeile übergibt
 
G

Gast2

Gast
Wie wäre es so:

Java:
import java.io.*;

class A {

	public static void main(String[] args) {
		BufferedOutputStream bos;
		try {
			bos = new BufferedOutputStream(new FileOutputStream("a.dat"));
			if (args.length != 1) {
				throw new IllegalArgumentException("Not enough/too many arguments given!");
			}
			try {
				int i = Integer.parseInt(args[0]);
			} catch (NumberFormatException e) {
				throw new IllegalArgumentException("Argument is not numeric!");
			}

			byte[] b = new byte[Integer.parseInt(args[0])];
			for (int i = 0; i < b.length; ++i) {
				b[i] = (byte) (Math.random() * 10);
				bos.write(b, 5, 20);
			}
			bos.close();

		} catch (FileNotFoundException e) {
			System.err.println("Cannot write to a.dat: " + e.getMessage());
		} catch (IOException e) {
			System.err.println("Failed to write to a.dat: " + e.getMessage());
		} catch (IllegalArgumentException e) {
			System.err.println("Illegal Usage: " + e.getMessage());
			System.err.println("This programm need to be called with: java A <Integer>");
		}
	}

}

Du kannst noch 25 andere Prüfungen machen und IllegalArgumentExceptions schmeissen die unten ausgegeben werden, z.B.
Java:
if(Integer.parseInt(args[0])< 25){
    throw new IllegalArgumentException("Argument need to be larger than 25!");
}
 
Zuletzt bearbeitet von einem Moderator:

Sergeant_Pepper

Bekanntes Mitglied
Fällt mir gerade ein...
füge diesen catch-Block hinzu
Java:
catch (ArrayIndexOutOfBoundsException e)
		{
			System.out.println("keine Parameter");
		}
der fängt den Fehler ab, der durch [c]Integer.parseInt(args[0])[/c] ausgelöst wird, wenn kein Paramter angegeben wird.

Stand ja auch schon in einem Posting von dir ... hätte eher drauf kommen müssen.

Bitte lies dir dazu auch die Javadoc durch, und auch gleich die für EOFException
 
G

Gelöschtes Mitglied 16929

Gast
Hier eine Lösung die funktionieren sollte ^^ viel spaß wenn du fragen hast dann meld dich!

Java:
import java.io.*;
 
public class A {
 
  public static void main(String[] args) {
	try {
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.dat"));
		byte[] b = new byte[Integer.parseInt(args[0])];
	    if(b.length < 25)
	    	throw new IllegalArgumentException("The parameter must be greater than 24.");
	    for (int i = 0; i < b.length; i++) {
		 b[i] = (byte) (Math.random() * 10);
		 bos.write(b, 5, 20);
	    }
	    bos.close();
	} catch (NumberFormatException e) {
		System.out.println("Parameter must be a number.");
	} catch (ArrayIndexOutOfBoundsException e) {
		System.out.println("You must enter a parameter.");
	} catch (FileNotFoundException e) {
		System.out.println("Unable to create file."); 
	} catch (IOException e) {
		System.out.println("Unable to write file.");
	} catch (IllegalArgumentException e) {
		System.out.println(e.getMessage());
	}
  }
 
}
 

Suinos

Bekanntes Mitglied
evil hat gesagt.:
wenn man keine Parameter in der kommandozeile übergibt
Und was hindert dich daran, solche Dinge einfach in einer if-Abfrage zu prüfen?
Java:
if (args.lenght == 0)
{
    System.out.println(":(");
}

else
{
    System.out.println(":)");
}

Gerade solche [c]IndexOutOfBoundsException[/c]s sind eigentlich dafür da, um dem Entwickler zu sagen, dass er was falsch macht.
 

evil

Aktives Mitglied
Hallo hemeroc,

danke für die Lösung :) Aber ein Frage hätte ich noch, woher kommt denn die Methode
Java:
System.out.println(e.getMessage())
? Die ist ja nirgends definiert, wenn ich das richtig sehe ???:L

Und @ Suinos, ich hatte das ja auch so, nur leider fehlte mir die else-Anweisung, weil ich noch eine weitere (unnötige) exception eingebaut hatte.

Vielen Dank an alle für eure Hilfe
 

Landei

Top Contributor
Du gibst der Exception ja im catch einen Namen, z.B. e oder meineBlaException. Innerhalb des catch-Blocks kannst du sie dann damit ansprechen:

Java:
try {
 ...
} catch (BlaException meineBlaException) {
   System.out.println(meineBlaException.getMessage());
}
 
G

Gast2

Gast
Hallo hemeroc,

danke für die Lösung :) Aber ein Frage hätte ich noch, woher kommt denn die Methode
Java:
System.out.println(e.getMessage())
? Die ist ja nirgends definiert, wenn ich das richtig sehe ???:L

Und @ Suinos, ich hatte das ja auch so, nur leider fehlte mir die else-Anweisung, weil ich noch eine weitere (unnötige) exception eingebaut hatte.

Vielen Dank an alle für eure Hilfe

Hast du dir meine Lösung angesehn? Da übergebe ich die Fehlermeldung in den Constructor - die bekommst du dann mit e.getMessage() wenn du die Exception im Catchblock gefangen hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
G Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
F Java exception bei der Ausführung Java Basics - Anfänger-Themen 10

Ähnliche Java Themen


Oben