Frage try and catch

  • Themenstarter Themenstarter Dr. Dönna
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

Dr. Dönna

Gast
Hallo!
Mein Code berechnet den Kehrwert von -10 bis 10. Bei 1/0 gibt es logischerweise einen Fehler. Zuvor habe ich ein try and catch im Inneren der Schleife durchfeführt. Dort hat es auch stets geklappt, dass der Code mit 1/1 weitererechnet hat. WErfe ich das Objekt e nun jedoch hoch, so hört der Code an der Position 11(1/0) auf. Wodran liegt das? Wie kann ich den Code hochwerfen und die SChleife trotzdem weiter laufen lassen?

Code:
public class aufgabe36_b
{
	public static void main(String args[])
	throws IOException
	{
			int n=1;
		try
		{
			for(int i=-10; i<=10; i++)
			{
				try
				{
					System.out.print("Durchlauf: " +n +" "); n++;
					System.out.println(1/i);
				}
				catch(ArithmeticException e)
				{
					throw e;
				}
			}
		}
		catch(ArithmeticException e)
		{
			System.out.println("Vorgang nicht möglich");
			System.out.println(e.getLocalizedMessage());
			System.out.println(e.toString());
			System.out.println(e.getClass());
		}
	}
}
 
so ein arg verschachteltes try'n'catch würd ich mir auch gar nich erst angewöhnen.
 
Oder lass das ganze try-catch weg und arbeite mit einem double (da dein ergebnis sonst immer 0 ist)
Code:
   int n = 1;
    for( int i = -10; i <= 10; i++ ) {
      System.out.print( "Durchlauf: " + n + " " );
      n++;
      double erg = 1d / i;
      if( Double.isInfinite( erg ) ) {
        System.out.println( "geht nicht" );
      } else {
        System.out.println( erg );
      }
    }
 
Ja, aber ich meine natürlich bei diesem Bsp.:
Da lässt sich ne Exception leich verhindern durch ein If..
Code:
public class aufgabe36_b
{
   public static void main(String args[])
   {
         int n=1;
         for(double i=-10; i<=10; i++)
         {

               System.out.print("Durchlauf: " +n +" "); n++;
               if(i!=0) { //<-- schaut ob i gleich null
                    System.out.println(1d/i);
               } else {
                    System.out.println("divide by 0 error"); //wenn ich gleich null gibt er ne error aus
               }
         }
   }
}
 
Gar nicht! Entweder Du wirfst einen Fehler durch
'throw e'
und dieser veranlasst den Abbruch der
for()-Schleife
oder Du machst irgendwas anderes im catch
zB ne Logausgabe mit
'System.out.println("Problem gefunden, egal ich mache trotzdem weiter");'
aber lässt das Programm weiter laufen.

Dh. der 'throw e' dient dazu wenn ein Problem auftritt, durch das
dein Programm nicht weiterlaufen kann/soll oder darf...

In der Praxis benutzt man das häufig um zB zusätzliches Logging
zu erhalten und kombiniert ne Ausgabe und den throw

Code:
catch(ArithmeticException e)
{
    System.out.println("Achtung Fehler in Zeile 12. Prog wird abgebrochen")
    throw e;
}

Natürlich kann man den catch auch benutzen um neue Objects zu erzeugen etc.

Aber was die Anderen geschrieben haben ist absolut das sinnvollste 😉 , allerdings gehts
halt nicht immer ohne...
Hoffe Dir hilft die Erklärung zum Verständniss vom exception handling mit try-catch
und throw.

hf chilli
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben