WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   [java] koordinatenpaare als string einlesen (http://www.wcm.at/forum/showthread.php?t=120410)

poison 30.12.2003 23:44

[java] koordinatenpaare als string einlesen
 
hallo!

ich habe ein problem bei folgender aufgabe:
ich soll die koordinatenpaare eines vielecks als string einlesen, die folgenden aufbau haben:
"(x,y)" wobei x und y Zahlen sind

der datensatz wird durch "=" abgeschlossen

also ich weiß wie man einen string einliest und dann die einzelnen zeichen ausliest -> damit könnte ich ja schon einmal die zahlen herausfiltern
(ich hoffe dieser gedankengang von mir ist richtig - bin nämlich noch programmieranfänger!)

nur wie speichere ich die zahlen dann um mit ihnen rechnen zu können - geht das vielleicht mit einem array?

bin um jeden vorschlag dankbar!

mfg poison

Br@in 30.12.2003 23:54

angenommen x ist 145, dann liest du als string ein: 1 - 4 - 5

eine vorher angelegte INT-Variable zB "xkoor"

xkoor=1
xkoor=xkoor*10+4
xkoor=xkoor*10+5

[damit ist xkoor das 145...]

mit der ykoor machst es dann genauso

dann übernimmst immer xkoor und ykoor in die nächste Zeile des Arrays...

Problem gelöst?

Tarjan 31.12.2003 00:33

Schaue dir mal die klasse java.awt.Point an, die beschreibt an sich eine koordinate im awt. entweder du kannst diese verwenden, oder du schreibst dir eine eigene klasse die die koordinaten so darstellt, wie du sie brauchst, bzw wenn du damit rechen willst, wird dir sowiseo nichts übrigbleiben als eine eigene klasse und die rechnungsarten al methoden zu implementieren.

poison 31.12.2003 17:38

also ich habe jetzt versucht die zahlen mittels StringTokenizer herauszufiltern aber irgendwo gibt es ein problem...

Code:


import eprog.*;

public class Konvneck extends EprogIO
{
    public static void main (String[] args)
    {
       
    String Eingabe = "";
   
    do
    {
        Eingabe = readWord();
       
        StringTokenizer konvertiert = new StringTokenizer (Eingabe, '(', ',', ')');
        println (konvertiert);
       
        while (konvertiert.hasMoreTokens()) {
        System.out.println(konvertiert.nextToken());
      }

    } while (!(Eingabe.endsWith("=")));
   
    }
}

irgendwie gibt er immer fehlermeldungen aus :(
was mache ich falsch?

mfg poison

Tarjan 31.12.2003 17:50

Der String Tokenizer kennt nur einen Delimiter. Du versuchst ihm 3 mitzugenen. Wenn die Eingabe immer (y,y) aussieht dann, entferne den 1. und letzte char. Dan gehts mit einen Stringtokenizer mit delimiter ",". Ausserdem braucht der Tokenizer einen String als Delimiter, keinen char (" " statt ' ').

Ich würde es aber komplett anders machen: mit toCharArray in eine char Array umwandeln und dann mit Charakter.isDigit() die Zahlen rausparsen. Eventuell kannst mit indexOf(',') den String vorher noch teilen.

poison 31.12.2003 18:40

Code:


import eprog.*;
import java.util.*;

public class Konvneck extends EprogIO
{
    public static void main (String[] args)
    {
       
    String Eingabe = "";
   
    do
    {
        Eingabe = readWord();
       
        char Zahlen[] = Eingabe.toCharArray();
        if (Charakter.isDigit())
        {}

    } while (!(Eingabe.endsWith("=")));
   
    }
}

meinst du so?
wie bekomme ich da die zahlen heraus?

danke auf jeden fall schon mal für deine hilfe! :)

mfg poison

Tarjan 31.12.2003 18:48

array durchiterien (mit for oder while schleife (wenn char zahl ist diese wegspeichern (zB. in StringBuffer), wenn wieder kein digit mehr ist -> diese mit Integer.parseInt(StringBuffer.toString()) in int umwandeln.

2. Möglichkeit mit indexOf('(') und indexOf(',') und indexOf(')') und der substring Methode von String die Zahlen rausholen.

1.Möglichkeit ist etwas komplizierter, dafür funktinoniert sie mit allen Zahlen in einen String, egal was sonst noch drinnen steht. 2.Möglichkeit ist einfacher, dafür funktiniert sie nur, wenn der String (x,y) aussieht.

poison 02.01.2004 11:12

guten morgen!

also ich bekomme noch eine fehlermeldung wenn ich folgenden code versuche zu kompilieren:
Konvneck.java [27:1] isDigit(char) in java.lang.Character cannot be applied to (char[])
if ( (Character.isDigit(Zeichen)) ) // Soll überprüfen ob Zeichen eine Zahl ist
^
1 error
Errors compiling Konvneck.

ich verstehe die ausgabe nicht ganz - was muss ich ändern?

Code:

import eprog.*;

public class Konvneck extends EprogIO
{
    public static void main (String[] args)
    {
       
    String Eingabe = "";
    float Laenge = 0;
   
    do
    {
        Eingabe = readWord();
       
        char Zeichen[] = Eingabe.toCharArray();
       
      for (int i = 0; i <= Zeichen.length; i++)
      {
          if ( (Character.isDigit(Zeichen)) ) // Soll überprüfen ob Zeichen eine Zahl ist
          {
              println (Zeichen);
          }
      }

    } while (!(Eingabe.endsWith("=")));
   
    }
}

mfg poison

jak 02.01.2004 12:38

Ich glaube da gehört statt:
Character.isDigit(Zeichen))
Character.isDigit(Zeichen[i]))

<edit>
Daher auch die Fehlermeldung: du versuchst die Funktion "isDigit" auf ein Array of char anzuwenden, nicht auf ein einzelnes char.
</edit>

Jak

Tarjan 02.01.2004 13:30

genau dass isses

poison 02.01.2004 14:12

ok ich habe das ganze mal ein bisschen überarbeitet:

Code:

import eprog.*;

public class Konvneck extends EprogIO
{
    public static void main (String[] args)
    {
        einlesen ();
    }
   
    /////////////////////////
    // Methode zum Einlesen//
    ////////////////////////
   
    private static void einlesen()
    {
        String Eingabe = "";
        char tmp;
        float Zahl = 0;
       
        do
        {Eingabe = readWord();
        char Zeichen[] = Eingabe.toCharArray();
       
        for (int i = 0; i <= Zeichen.length; i++)
        {
            tmp = Zeichen[i];
           
            if ( (Character.isDigit(tmp)) || (tmp == '-') ) // Soll überprüfen ob Zeichen eine Zahl ist
            {
                StringBuffer Zahlen = new StringBuffer(tmp);
                Zahlen.append (tmp);               
                Zahl = Float.parseFloat(Zahlen.toString());
                println (Zahl);
            }
        }
    } while (!(Eingabe.endsWith("=")));
   
    }
}

jetzt gibt es ein paar probleme:
das - darf ich ja nicht in den string speichern weil der dann umgewandelt wird in einen float -> das brauch ich aber weil es ja sonst eine ganz andere zahl ist!

außerdem nimmt er immer nur eine Zahl an -> also wenn ich eine kommazahl eingebe z.b 3.4 dann nimmt er 3 als zahl an und 4 als einzelne zahl an -> wie kann ich das ändern!

ich danke euch schon mal für eure hilfe!

mfg poison

Tarjan 02.01.2004 14:31

mach noch zusätzlich eine abfrage || (tmp == '.'), dann wird . dazu gespeichert

poison 02.01.2004 14:54

leider funktioniert das so nicht -> es tritt das gleiche problem wie beim -

wenn ich z.b. (3.4,5) eingebe macht er folgende fehlermeldung
(3.4,5)
java.lang.NumberFormatException: For input string: "."
at java.lang.NumberFormatException.forInputString(Num berFormatException.java:48)
at java.lang.FloatingDecimal.readJavaFormatString(Flo atingDecimal.java:1207)
at java.lang.Float.parseFloat(Float.java:222)
at Konvneck.einlesen(Konvneck.java:42)
at Konvneck.main(Konvneck.java:15)
Exception in thread "main" 7
3.0


außerdem bin ich gerade draufgekommen kann ich nicht mehr als ein koordinatenpaar einlesen dann macht er folgende fehlermeldung:
eingabe: (3,4) (5,6)

3.0
4.0
java.lang.ArrayIndexOutOfBoundsException: 5
at Konvneck.einlesen(Konvneck.java:35)
at Konvneck.main(Konvneck.java:15)
Exception in thread "main"

was muss ich hier machen?

mfg poison

Tarjan 02.01.2004 17:56

der fehler beim konvertrieren liegt darin, dass du jede char gleich in eine float umwandelst, erst umwandeln, wenn wieder ein anderes zeichen als -,. oder zahl kommt (also die umwandlungsroutine in den else zweig stecken:
Code:

StringBuffer zahlen = new Stringbuffer();
if ( Character.isDigit(tmp) || tmp=='-' || tmp=='.')
{
  zahlen.append (tmp);               
}
else if (zahl.length()!=0)
{
  zahl = Float.parseFloat(zahlen.toString());
  println (Zahl);
}

übergibts du die zweite koordinate als zweiten parameter? dann liegt die zweite koordinate auch in args[1] und nicht mehr in args[0]

ps: java Konvention ist, dass variablennamen klein geschrieben werden, genauso wie methoden und packages, nur klassennamen werden groß geschrieben

pps: den code oben habe ich nicht überprüft, nur so aus dem stegreif geschrieben ;)

jak 02.01.2004 18:54

Mir ist gerade eine andere möglichkeit eingefallen:
Du suchst im String nach "(" und ")", machst
String[] temp=input.substring(klammeraufposition,klammerzup osition).split(",",2);
Damit hast du ein String[] temp
float f;
for (int i=0;i<temp.length;i++){
try{
f=Float.parseFloat(temp[i])
//mach irgendetwas mit f
}
catch (NumberFormatException e){}
}

Durch das parseFloat spart man sich das ganze suchen nach .,-,usw.

Jak

Tarjan 02.01.2004 19:15

das ist mein 2. Vorschlag oben gewesen

jak 02.01.2004 19:42

Sorry, hab ich übersehen.
dein 2.Vorschlag würde wohl etwa so aussehen.
Code:

float xKoord,yKoord;
//Hier muss noch irgendeine Überprüfung her, sonst könnte es eine Endlosschleife werden
while (input.length>1){
 String t=input.substring(input.indexOf('(')+1,input.indexOf(')')-1);
 try{
  xKoord=Float.parseFloat(t.substring(0,t.indexOf(',')-1));
  yKoord=Float.parseFloat(t.substring(t.indexOf(',')+1,t.length));
 }
 catch (NumberFormatException e){
  throw new IllegalArgumentException("Ungueltiges Eingabeformat");
 }
 //irgendwas mit xKoord und yKoord machen
 input=input.substring(input.indexOf(')')+1,input.length);
}

Jak

poison 02.01.2004 20:07

hallo jak!

danke für deinen vorschlag, aber jetzt habe ich mich schon so lange mit tarjans version herumgeschlagen - werd jetzt dabei bleiben

ich glaube es gibt ein kleines problem mit der else if abfrage - das ganze wird zwar jetzt ohne fehler kompiliert aber wenn ich versuche etwas einzugeben macht er gar nichts... :(

Code:

import eprog.*;

public class Konvneck extends EprogIO {
    public static void main(String[] args) {
        einlesen();
    }
   
    /////////////////////////
    // Methode zum Einlesen//
    /////////////////////////
   
    private static void einlesen() {
        String eingabe = "";
        char tmp;
        float zahl = 0;

        do {
            eingabe = readWord();
            char zeichen[] = eingabe.toCharArray();
           
            for (int i = 0; i < zeichen.length; i++)
            {
                tmp = zeichen[i];
                StringBuffer zahlen = new StringBuffer();
               
                if ( (Character.isDigit(tmp)) || (tmp == '-') || (tmp == '.') )
                {
                    zahlen.append(tmp);
                }
               
                else if (zahlen.length()!= 0)
                {
                zahl = Float.parseFloat(zahlen.toString());
                println(zahl);
                }
            }
        } while (!(Eingabe.endsWith("=")));
    }
}

mfg poison

Tarjan 02.01.2004 21:27

habs mir angesehen, die zeile StringBuffer zahlen = new StringBuffer(); gehört vor die for schleife, ansonsten wird der stringbuffer immer wieder neu angelegt, so sollte es funktionieren:
Code:

                        StringBuffer zahlen = new StringBuffer();
                        for (int i = 0; i < zeichen.length; i++)
                        {
                                tmp = zeichen[i];
                               
                               
               
                                if ( (Character.isDigit(tmp)) || (tmp == '-') || (tmp == '.') )
                                {
                                        zahlen.append(tmp);
                                }
               
                                else if (zahlen.length()!=0)
                                {
                                        zahl = Float.parseFloat(zahlen.toString());
                                        System.out.println(zahl);
                                        zahlen = new StringBuffer();
                                }
                        }


Tarjan 02.01.2004 21:40

noch eine zusätzliche frage: welchen editor beutzt du eigentlich zum erstellen der klassen?

poison 02.01.2004 21:52

@tarjan

ich benütze netbeans

jetzt gibt er wieder etwas aus nur das problem ist dabei, dass er wenn ich z.b. (3,4) eingebe er mir folgendes ausgibt
3.0
34.0

danke auf jeden fall für deine hilfe bisher! :)

mfg poison

Tarjan 02.01.2004 22:00

hmm, seltsam, ich habe deine lesemethode jetzt nachgebildet, und bei mir kommt der 1 nicht vor. schon mal das programm debugt? ich fragte eben wegen der möglichkeit des debuggens, da sehe ich meist solche fehler wie zb. das mit dem stringbuffer.

poison 03.01.2004 19:52

ok ich habe mich jetzt ein wenig gespielt mit dem ganzen und jetzt funktioniert auch das einlesen eines koordinatenpaares -> nur bei mehreren gibt es probleme

wenn ich z.b. eingebe (3,4) (4,5)= gibt er folgende fehlermeldung aus:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1444)
at Konvneck.einlesen(Konvneck.java:31)
at Konvneck.main(Konvneck.java:15)
Exception in thread "main"

das erscheint für mich auch klar weil ein substring ja bei einem leerzeichen endet -> nur wie kann ich dem jetzt entgegen wirken?

außerdem wie kann ich die ganzen gewonnen zahlen speichern um mit ihnen weiterzuarbeiten... ein array geht ja mal nicht weil es ja eine vorgegebene größe haben muss -> die weiß ich ja aber nicht!

Code:

import eprog.*;

public class Konvneck extends EprogIO
{
    public static void main(String[] args)
    {
        einlesen();
    }
   
    /////////////////////////
    // Methode zum Einlesen//
    /////////////////////////
   
    private static void einlesen()
    {
        float xKoord, yKoord;
        String input = ""; // dieser String enthält die Eingabe
        int counter = 0; // zum Zählen der Koordinatenpaare
       
        do
        {
            input = readWord();
            String teil = input.substring(input.indexOf('(')+1, input.indexOf(')'));
           
            try
            {
                xKoord=Float.parseFloat(teil.substring(0, teil.indexOf(',')));
                yKoord=Float.parseFloat(teil.substring(teil.indexOf(',')+1, teil.length()));
                println (xKoord);
                println (yKoord);
                counter++;
                println (counter);
            }
           
            catch (NumberFormatException e)
            {
                throw new IllegalArgumentException("FALSCHE EINGABE");
            }
           
            if ( (xKoord < -100) || (xKoord > 100) || (yKoord < -100) || (yKoord > 100) )
            {
                println ("FALSCHE EINGABE");
            }

        } while (!(input.endsWith("=")));
       
        if ( (counter < 3) || (counter > 15) )
        {
            println ("FALSCHE EINGABE");
        }
    }
}

mfg poison

jak 03.01.2004 20:32

@ 1.Problem:
Befrage deinen debugger. Breakpoints sind meistens hilfreich.
@2.
Möglichkeit 1:
Array, befor du etwas reinschreibst schaust du ob es voll ist, wenn es voll ist kopierst du das alte Array in ein doppelt so großes
Möglichkeit 2:
Hashtable
Möglichkeit 3:
LinkedList
...

Jak

poison 03.01.2004 21:08

ich habe schon versucht das problem mit dem debugger zu beheben leider finde ich trotzdem den fehler nicht... :(

mfg poison

Tarjan 04.01.2004 01:32

ArrayList ist das naheliegendes, arbeitet wie ein Array, nur ist variabel.

Der Fehler tritt beim Substring auf, da anscheinend indexOf -1 zurückliefert, d.h. er findet den gesuchten char nicht mehr im String -> Lösung: indexOf vorher feststellen, und danach erst substring mit if bedingung:


Code:

int index1 = input.indexOf('(');
int index2 = input.indexOf(')');
if (index1 != -1 && index2 > index 1)
  String teil = input.substring(index1+1, index2);

ps: obejktorientierter ist es, eine ethode zu haben, die aus einen (x,y) ein koordinatenpaar extrahiert, und diese wird von einer anderen methode benutzt

poison 04.01.2004 22:43

danke für deine hilfe! :)

also das mit dem einlesen ist nun kein problem mehr -> dafür kann ich das ganze nicht zu einer methode mit rückgabewert machen (was in diesem fall wohl sinnvoll wäre)

mein rückgabewert sollte der Punkt mit x- und y-Koordinate sein

was ist daran falsch?

Code:

    private static Point2D.Float einlesen()
    {
        float xKoord, yKoord;
        String input = ""; // dieser String enthält die Eingabe
        int counter = 0; // zum Zählen der Koordinatenpaare
       
        do
        {
            input = readWord();
           
            int index1 = input.indexOf('(');
            int index2 = input.indexOf(')');
           
            if ( (index1 != -1) && (index2 > index1))
            {
                String teil = input.substring(index1+1, index2);
               
                try
                {
                    xKoord=Float.parseFloat(teil.substring(0, teil.indexOf(',')));
                    yKoord=Float.parseFloat(teil.substring(teil.indexOf(',')+1, teil.length()));
                    Point2D.Float punkt = new Point2D.Float(xKoord, yKoord);
               
                    if ( (xKoord < -100) || (xKoord > 100) || (yKoord < -100) || (yKoord > 100) )
                    {
                        println ("FALSCHE EINGABE");
                    }
                   
                    counter++;
                   
                    if ( (counter < 3) || (counter > 15) )
                    {
                        println ("FALSCHE EINGABE");
                    }
                }
           
                catch (NumberFormatException e)
                {
                    throw new IllegalArgumentException("FALSCHE EINGABE");
                }
            }
        } while (!(input.endsWith("=")));
       
        return Point2D.Float;
    }

die fehlermeldung:
Konvneck.java [67:1] variable xKoord might not have been initialized
return new Point2D.Float(xKoord,yKoord);
^
Konvneck.java [67:1] variable yKoord might not have been initialized
return new Point2D.Float(xKoord,yKoord);
^
2 errors
Errors compiling Konvneck.

ich verstehe schon, dass er die variablen nicht kennt -> sie existieren ja nur im try-catch-block
nur weiß ich nicht wie ich das beheben könnte

mfg poison

Tarjan 04.01.2004 23:29

indem du die variable ausserhalb definierst
zb. vor der while schleife mit
Point2D.Float punkt = null;

und dann nur mehr innerhalb des try catch blocks
punkt = new Point2D.Float(xKoord, yKoord);

ps: gib die variable zurück, nicht die Klasse:
return punkt;

poison 04.01.2004 23:38

ok so weit so gut...

nun kann ich z.b. eine neue methode schreiben wo ich diesen punkt verwende oder?

z.b. private static void punkt
{print (punkt);}

das müsste doch funktionieren oder?
bei mir geht das nämlich wieder einmal nicht :(

mfg poison

Tarjan 04.01.2004 23:45

jo, das müsste funktionieren

]
Code:

public void neueMethode()
{
 Point2D.Float p = einlesen();

 ... arbeite weiter mit p...
}

ps: was ist das eigentlich für eine aufgabe, da gibs nämlich jemander der für genau das gleiche beispiel eine lösung sucht ;)

poison 04.01.2004 23:55

Q
 
ok so jetzt habe ich mal genug vom programmieren... der mensch muss ja auch noch etwas anderes tun -> z.b schlafen ;)

mfg poison

ps: das ist eine von mehreren verschiedenen programmieraufgabe, die wir auf der uni lösen müssen -> der andere, der auch um hilfe gebeten hat, hat aber ein anderes beispiel als ich...

ach, ja ich hoffe nciht, dass jemand jetzt vermutet ich bin so bequem und lasse mir hier die aufgabe lösen und versuche nicht selber nachzudenken -> ich gebe mir wirklich mühe und versuche auch soweit es mir möglich ist es alleine zu lösen...
nur als programmieranfänger hat man es ziemlcih schwer alleine mit einem programm fertig zu werden, das fehler enthält
man sieht entweder die fehler nicht oder man erkennt sie zwar aber weiß nicht wie man sie behebt

deswegen bin ich dir tarjan auch wirklich sehr dankbar für deine hilfe! :)

Tarjan 05.01.2004 00:03

ist mir halt aufgefallen, da er die gleiche mutterklasse verwendet wie du

naja, aller anfang ist schwer, nicht unterkriegen lassen ;)

gut nacht

poison 05.01.2004 15:59

ok jetzt habe ich versucht die methode so umzuschreiben, dass die punkte in einen vector gespeichert werden und dieser vector dann zurückgegeben wird -> das macht der code auch nur wird in diesem vector nur der letzte punkt gespeichert
jetzt meine frage wo liegt der fehler?



Code:

import eprog.*;
import java.util.*;
import java.awt.geom.*;

public class Konvneck extends EprogIO
{
    public static void main(String[] args)
    {
        point();
    }
   
    /////////////////////////
    // Methode zum Einlesen//
    /////////////////////////
   
    private static Vector einlesen()
    {
        float xKoord, yKoord;
        String input = ""; // dieser String enthält die Eingabe
        int counter = 0; // zum Zählen der Koordinatenpaare
        Vector punkte = null;
        Point2D.Float punkt = null;
       
        do
        {
            input = readWord();
           
            int index1 = input.indexOf('(');
            int index2 = input.indexOf(')');
           
            if ( (index1 != -1) && (index2 > index1))
            {
                String teil = input.substring(index1+1, index2);
               
                try
                {
                    xKoord=Float.parseFloat(teil.substring(0, teil.indexOf(',')));
                    yKoord=Float.parseFloat(teil.substring(teil.indexOf(',')+1, teil.length()));
                   
                    if ( (xKoord < -100) || (xKoord > 100) || (yKoord < -100) || (yKoord > 100) )
                    {
                        println ("FALSCHE EINGABE");
                    }
                   
                    punkt = new Point2D.Float(xKoord, yKoord);
                   
                    println (xKoord);
                    println (yKoord);
                    println (punkt);
                }
     
                catch (NumberFormatException e)
                {
                    throw new IllegalArgumentException("FALSCHE EINGABE");
                }
               
                punkte = new Vector();
                punkte.add (punkt);
                counter++;
               
            }
        } while (!(input.endsWith("=")));

        println (counter);
       
        if ( (counter < 3) || (counter > 15) )
        {
            println ("FALSCHE EINGABE");
        }
       
        return punkte;
    }
   
   
    public static void point()
    {
        Vector punkte = einlesen();
        println (punkte.size());
        Enumeration enum = punkte.elements(); // Enumeration auf einzelne Elemente
       
        while(enum.hasMoreElements())
        {
            println (enum.nextElement().toString()+" ");
        }
    }
 
}

mfg poison

Tarjan 05.01.2004 18:44

du legst bei jeden punkt mit
Code:

punkte = new Vector();
einen neuen vektor an, ud speicherst den letzten punkt da drinnen, somit kann nur der letzte punkt drinnen gespeichert werden, lege den Vevtor dort an, wo er definiert wird, du willst ja alle punkte in den vector reinspeichern

ps: bei debuggen mit variablenkontrolle fallen solche dinge auf

jak 06.01.2004 12:37

gelöscht

hat sich erledigt
Jak

poison 07.01.2004 13:45

ok mein programm ist nun fast fertig -> nur eine kleinigkeit passt noch nicht:
wenn die eingabe nicht den regeln entspricht dann soll sofort das ganze beendet werden

wie mache ich das?

mfg poison

jak 07.01.2004 17:50

Mir fallen zwei Möglichkeiten ein:
1. System.exit(0) oder so ähnlich
2. eine Exception werfen: Du kapselst das ganze Programm in einen try-catch Block und wirfst bei illegaler eingabe eine Exception.

Mir ist 2. sympatischer.

Jak

Tarjan 08.01.2004 09:01

Sind die beiden gängigen Methoden, wobei die erste Möglichkeit mit System.exit(int) zwar die einfachere, aber auch die brutalere ist, da hier die VM sofort beendet wird.

poison 08.01.2004 16:24

also wenn ich es mit System.exit(0) mache dann sollte das aber keinen wirklichen unterschied machen - ich meine vom programmablauf selbst oder?

mfg poison

jak 08.01.2004 19:49

Rein vom Programmablauf gibt es nur einen minimalen Unterschied:
beim .exit verlässt du das Programm sofort, egal wo du gerade warst.
Bei einem try{...throw...}catch(...){../*hier*/.} kannst du noch etwas ausführen (da wo das "hier" steht). Außerdem wandert die Exception durch alle Unterprogramme bis sie gefangen wird. Du kannst damit also erheblich mehr machen.

Wenn du weiter Java oder C++ Programmieren willst solltest du dir Exceptions so oder so mal anschaun. Sie sind ziemlich praktisch.

Jak


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag