Ausnahmebehandlung ohne Try und Catch



  • Hallo ich wieder (die JavaNiete)

    Weil mein Quelltext geringsten Ansprüchen genügen sollte, hätte ich jetzt da eine Frage. Erstmal die Vollständige Fuktion um die es geht.

    private static float GetDensity(String substanceName)
    {
    	float density = 0F;
    
    	//Wenn es sich bei dem übergebenen String um eine Zahl handelt lässt sie sich
    	//hier formatieren, wenn nicht, wird versucht den String im Array substanceNameDB
    	//ausfindig zu machen (Catch Routine)
    	try
    	{
    		density = Float.parseFloat(substanceName);
    	}
    
    	catch(Exception e)
    	{
    		for(int i = 0; i < substanceNameDB.length; i += 1)
    		{
    			if(substanceName.equals(substanceNameDB[i]))
    			{
    				density = densityDB[i];
    				break;
    			}
    		}
    	}
    	return density;
    }
    

    Also in dieser Funktion geht es darum, zuerst zu versuchen in einen Float zu parsen. Wenn das nicht glückt, gehe ich davon aus, dass ich sich bei dem substanceName um einen gültigen string handelt und versuche in meiner Liste diese Substanz/dieses Element zu finden.

    Mit der Ausnahmebehandlung funktioniert das eigentlich perfekt. Ich möchte jetzt aber gerne ohne das Try und Catch auskommen.

    Kann man nicht irgendwie mit IF prüfen ob es sich um eine Zahl handelt? In einem IF habe ich es ja schon ausprobiert, aber der simple Aufruf dieser Methode führt (sofern es keine gültige Zahl ist) sofort zum Programmabsturz.

    Es geht einfach nur darum, den Code so einfach wie möglich zu halten. Da dieser Code für einen Anfänger geschrieben wird.

    Gruß

    Markus Seidl



  • Ich denke, du wirst ohne catch nicht auskommen.
    Wenn parseFloat() nämlich fehlschlägt, wirft es eine NumberFormatException, ob du willst oder nicht. 🙂
    Außerdem sind Exception schon ein grundlegendes Konzpet und Java (und anderen OOP Sprachen), die man sinnvol einsetzen kann. 🙂



  • Das weiß ich auch, und ich verwende die Ausnahmebehandlung auch sehr gerne, vereinfacht das ganze doch sehr. Man kann das in seinem Programmablauf, eben wie in meinem Fall (wenns keine zahl ist musses ein Wort sein) berücksichtigen.

    Es ging halt einfach nur darum, weil ich das Programm für einen Anfänger schreibe. Ich selbst programmiere schon seit einer Weile C#, für mich ist das gewohnt. Aber danke für die schnelle Antwort, dann werde ich halt einen Weg finden, das meinem Bruder verständlich zu erklären.

    Gruß

    Markus Seidl



  • Es gibt in der Klasse Character die Methoden isLetter und isNumber damit könntest du den übergebenen String Zeichen für Zeichen durchgehen und untersuchen.

    Du könntest dir dann auch einen eigenen Parser schreiben.

    MfG
    DarkMight1



  • Die Idee mit dem eigenen Parser hatte ich auch schon. Bzw. es manuell durchzuprüfen. Es ist nur die Frage, was für einen Anfänger leichter ist:
    Manuelle Riesenparser oder Try... Catch... Finally... . Aber das mit dem isNumber und isChar dürfte ne 10-15 Zeilen Geschichte werden. Nach sowas habe ich für die Klasse String gesucht, Aber Eclipse hat mir in seinem IntelliSense dazu nichts angezeigt.

    Merci dir DarkMight1

    Gruß

    Markus Seidl


Anmelden zum Antworten