# Exception einbauen.aber wie?



## Timo (6. Sep 2005)

also ich habe folgendes Problem ich muss in dem unten angegebenen Programm eine
Exception einbauen damit die Oktahlzahl nicht überschritten wird. Ich hab kein
Ahnung was da gemeint ist oder wie  man die Exception macht. 
Hoffe jemand kann mir helfen.  ???:L 


```
import java.io.*;
public class oktaltodezi {
public static void main (String[] args) throws IOException {
BufferedReader Tastatur = new BufferedReader (new InputStreamReader(System.in));
int Ergebnis = 0, Index = 0; 
char Zeichen;
String Oktalzahl = Tastatur.readLine();
     for(;;;)){
              Zeichen = Oktalzahl.charAt(Index);
	      switch (Zeichen) {
	         case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': 
	         case '8': case '9':
	         Ergebnis = Ergebnis + (int) Zeichen - 48;
	         break;}
	      if(Index == Oktalzahl.length()-1){
	         System.out.println("dezimalzahl ist: " + Ergebnis );
	         return;}    
	      else Ergebnis *= 8;
	      Index++;
          }
   }
}
```

viele grüße

Timo

_L-ectron-X hat die Code-Tags eingefügt._


----------



## The_S (6. Sep 2005)

Eine Exception baust du ein, indem du um den Gefährlichen Code folgendes baust:


```
try {
    // gefährlicher Code
}
catch (Exception e) { // besser mit der genauen Exception Bezeichnung (z. B. NullPointerException)
    // was machen, wenn ein Fehler auftritt
}
// Rest des Programms
```


----------



## L-ectron-X (6. Sep 2005)

...gefährlicher Code... :lol:  :wink: 
...sagen wir kritisch. Oder besser: Code, bei dessen Ausführung etwas "schief gehen" kann.


----------



## Timo (6. Sep 2005)

genau: NullPointerException   - das wurde mir gesagt
try catch sollte es nicht sein!

aber wo und wie mach ich das genau mit NullPointerException und warum kann die oktalzahl überhaupt überschritten werden :?:  kann man sowas nicht mit einer do-while schleife machen wozu das ganze ???:L 

könnte das mal jemand mit der NullPointerException in meinem Quelltext machen?


----------



## mic_checker (6. Sep 2005)

du musst ne NullPointerException auslösen wenn ein Fehler auftritt? Normalerweise verwendet man die nur dann wenn etwas nicht korrekt instanziert wurde etc.

Wenn du eine Exception auslösen willst kannst mit throw eine schmeissen, hatte aber gedacht du willst sie behandeln.


----------



## Timo (6. Sep 2005)

ok vergesst einfach was ich gesagt hab weil ich keine ahnung von exceptions habe
ich weiß nur das ich eine machen soll damit die oktahlzahl nicht überschritten wird.
aber selbst das ist mir ein schleierhaft weil das programm gut funktioniert


----------



## bygones (6. Sep 2005)

ok - bitte gewoehn dir an Variablen mit Kleinbuchstaben beginnen zu lassen und Klassennamen mit Grossbuchstaben

keine ahnung ob oktalzahlen irgendwelchen Restriktionen unterliegen ... generell gilt wie gesagt, per throw kann man bewusst eine exception schmeissen.

z.b.


```
if(whatEverHappened) {
  throw new IllegalArgumentException("Ihr Argument ist mies !");
}
```


----------



## Guest (6. Sep 2005)

also ich kann eine unendlich lange oktalzahl eingeben aber eine fehlermeldung kommt nie
das bedeutet dann das ich eine Exception auslösen muss weil irgendwas im code falsch ist oder?


----------



## bygones (6. Sep 2005)

Anonymous hat gesagt.:
			
		

> also ich kann eine unendlich lange oktalzahl eingeben aber eine fehlermeldung kommt nie
> das bedeutet dann das ich eine Exception auslösen muss weil irgendwas im code falsch ist oder?


im aktuellen code nicht nein. 

Wie gesagt ich weiss leider nicht, ob eine Oktalzahl gewisse Restriktionen erfuellen muss (teilbar durch, mind so gross, maximal so gross usw). wenn eine dieser Bedingungen eintritt, dann kannst du eine Exception werfen. 

Eine Exception werfen heisst nicht, dass dein Code falsch ist, es heisst, dass eine Situation eingetroffen ist, die fuer dein Programm falsch ist.


----------



## L-ectron-X (6. Sep 2005)

Exceptions sind, wie ihr Name bereits andeutet, für Ausnahmefälle. Also Fälle, in denen das Programm abstürzen würde, wenn ein Fehler nicht behandelt werden würde.


----------



## Guest (6. Sep 2005)

also ich glaub ich habs kapiert:



```
import java.io.*; 
public class Oktaltodezi { 
public static void main (String[] args) throws IOException { 
BufferedReader Tastatur = new BufferedReader (new InputStreamReader(System.in)); 
int ergebnis = 0, index = 0; 
char zeichen; 
String oktalzahl = Tastatur.readLine(); 
  if (oktalzahl>1000) 
  {
      throw new egalwiedashierheißtException("die oktalzahl darf 1000 nicht überschreiten");
  }
     for(;;){ 
              zeichen = oktalzahl.charAt(index); 
         switch (Zeichen) { 
            case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': 
            case '8': case '9': 
            ergebnis = ergebnis + (int) zeichen - 48; 
            break;} 
         if(index == oktalzahl.length()-1){ 
            System.out.println("dezimalzahl ist: " + ergebnis ); 
            return;}    
         else ergebnis *= 8; 
         index++; 
          } 
   } 
}
```


----------



## bygones (6. Sep 2005)

vom prinzip her richtig. wichtig ist dann v.a., dass im Methodenkopf diese Exeption noch im throws dabei ist


```
public static void main (String[] args) throws IOException, egalwiedashierheißtException
```

in deinem Fall ist meiner Ansicht nach eine IllegalArgumentException passend


----------



## Timo (6. Sep 2005)

gut danke..ihr habt mir sehr weiter geholfen
ich übe dann noch ein bißchen für mich wenn ich nicht weiterkomme stelle ich irgendwann noch mal ne frage

alles gute

timo


----------

