Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GoTo in java gibt es nicht... alternative? (https://www.delphipraxis.net/33608-goto-java-gibt-es-nicht-alternative.html)

Nicodius 9. Nov 2004 21:25


GoTo in java gibt es nicht... alternative?
 
Code:
  public static void main(String[] args) throws Exception
    {
      String line;
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
      int EingabeSec = 0;
      TimeMachine2 tm2 = new TimeMachine2();
      System.out.println("Sekundeneingabe: ");
      line = br.readLine();
      EingabeSec = Integer.parseInt(line);
      tm2.SetsecondsIN(EingabeSec);
      tm2.transform();
      System.out.println(tm2.GetHours()+" h, " + tm2.GetMinutes() + " m, "+ tm2.GetSeconds() + " s");
      System.out.println("nochmal?");
    //-------
      boolean bol = false;
      line = br.readLine();
      if(line == "Ja")
      {
        // ?????   hier muss ich dann in die zeile "System.out.println("Sekundeneingabe: ");"  
        // zurückgehen
      }
wie mach ich das?

StefanDP 9. Nov 2004 21:29

Re: GoTo in java gibt es nicht... alternative?
 
pack das ganze doch in eine
while nochmal = ja do
...
schleife rein

am anfang halt schon auf ja setzen und dann immer mit der abfrage

alcaeus 9. Nov 2004 21:29

Re: GoTo in java gibt es nicht... alternative?
 
Hi Nico,

nach 6 Monaten Java-Pause schieße ich einmal blind drauflos:

Code:
public static void main(String[] args) throws Exception
    { 
      String line;
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
      int EingabeSec = 0;
      TimeMachine2 tm2 = new TimeMachine2();
      do
      {
            System.out.println("Sekundeneingabe: ");
            line = br.readLine();
            EingabeSec = Integer.parseInt(line);
            tm2.SetsecondsIN(EingabeSec);
            tm2.transform();
            System.out.println(tm2.GetHours()+" h, " + tm2.GetMinutes() + " m, "+ tm2.GetSeconds() + " s");
            System.out.println("nochmal?");
          //------- 
            boolean bol = false;
            line = br.readLine();
      } while ( line != "Ja" );
Greetz
alcaeus

PS: Getestet ist der Code nicht.

glkgereon 9. Nov 2004 21:30

Re: GoTo in java gibt es nicht... alternative?
 
vielleicht so?

Code:
 public static void main(String[] args) throws Exception
    { 
      String line = "Ja";
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
      int EingabeSec = 0;
      TimeMachine2 tm2 = new TimeMachine2();
    while (line=="Ja")
    {
      System.out.println("Sekundeneingabe: ");
      line = br.readLine();
      EingabeSec = Integer.parseInt(line);
      tm2.SetsecondsIN(EingabeSec);
      tm2.transform();
      System.out.println(tm2.GetHours()+" h, " + tm2.GetMinutes() + " m, "+ tm2.GetSeconds() + " s");
      System.out.println("nochmal?");
    //------- 
      boolean bol = false;
      line = br.readLine();
    }
ich hab nur die while-schleife hinzugefügt und den string line auf "Ja" initialisiert...


EDIT: Siehe StefanDP :wink:

Nicodius 9. Nov 2004 21:33

Re: GoTo in java gibt es nicht... alternative?
 
Zitat:

Sekundeneingabe:
12023
3 h, 20 m, 23 s
nochmal?
Ja
Sekundeneingabe:
1233
0 h, 20 m, 33 s
nochmal?
nein
Sekundeneingabe:

das geht nicht ganz .....

Sanchez 9. Nov 2004 21:34

Re: GoTo in java gibt es nicht... alternative?
 
:shock:
Du verwendest ernsthaft Gotos??? Schäm dich.

Anstatt des Gotos solltest du eine Schleife verwenden.
z.B. in Delphi
Delphi-Quellcode:
repeat
  writeln('nochmal');
  nochmal := WahrOderFalsch;
until not nochmal;
Solange nchmal true ist, wird die Schleife durchgelaufen.
In Java heißt die Schleife IMHO do-while-Schleife.

grüße, daniel

Nicodius 9. Nov 2004 21:38

Re: GoTo in java gibt es nicht... alternative?
 
ich liebe GoTos auch bei delphi :mrgreen: fragt mich nicht wieso aber manchmal isses witzig =) (besonders wenns dir achso kritischen profs entdecken und fast umkippen :spin2: )

alcaeus 9. Nov 2004 21:38

Re: GoTo in java gibt es nicht... alternative?
 
:oops: Es ist wohl noch zu früh für mich...

Das hier:
Code:
while ( line != "Ja" );
ist natürlich kompletter Schwachsinn.
Es müsste eigentlich lauten
Code:
while ( line == "Ja" );
und müsste funktionieren (evtl. auch mal ' anstatt " verwenden, ich weiß nicht mehr wie das in Java geht :roll:)

Greetz
alcaeus

Nicodius 9. Nov 2004 21:42

Re: GoTo in java gibt es nicht... alternative?
 
alcaeus das geht auch nicht ^^

Zitat:

Sekundeneingabe:
12000
3 h, 20 m, 0 s
nochmal?
Ja
122

... ;) :zwinker:

glkgereon 9. Nov 2004 21:45

Re: GoTo in java gibt es nicht... alternative?
 
ähhh....ja meins muss aber eigentlich von der Logik her funzen... :gruebel:

lass dir mal line ausgeben...event. is die eingabe schrott...

Nicodius 9. Nov 2004 21:46

Re: GoTo in java gibt es nicht... alternative?
 
nee dann würd ja ne exception kommen *g*

alcaeus 9. Nov 2004 21:49

Re: GoTo in java gibt es nicht... alternative?
 
@Nico: wenn die Wiederholung nicht funktioniert, dann ist die Eingabe Schrott. Sieh mal nach ob da vielleicht ein \n dranhängt :zwinker:

Greetz
alcaeus

Sanchez 9. Nov 2004 21:49

Re: GoTo in java gibt es nicht... alternative?
 
Zitat:

Zitat von Nicodius
ich liebe GoTos auch bei delphi :mrgreen: fragt mich nicht wieso aber manchmal isses witzig =)

Ich hab keine Ahnung was daran witzig sein soll.
Ich finds eher traurig :mrgreen:

Nicodius 9. Nov 2004 21:52

Re: GoTo in java gibt es nicht... alternative?
 
Zitat:

Zitat von alcaeus
@Nico: wenn die Wiederholung nicht funktioniert, dann ist die Eingabe Schrott. Sieh mal nach ob da vielleicht ein \n dranhängt :zwinker:

Greetz
alcaeus


ne sicher nicht ;) ... es geht ja bei "einmaligen" durchlauf ;)

Nicodius 9. Nov 2004 21:53

Re: GoTo in java gibt es nicht... alternative?
 
Code:
  public static void main(String[] args) throws Exception
    { 
      String line;
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
      int EingabeSec = 0;
      TimeMachine2 tm2 = new TimeMachine2();
      do
      { 
            System.out.println("Sekundeneingabe: ");
            line = br.readLine();
            EingabeSec = Integer.parseInt(line);
            tm2.SetsecondsIN(EingabeSec);
            tm2.transform();
            System.out.println(tm2.GetHours()+" h, " + tm2.GetMinutes() + " m, "+ tm2.GetSeconds() + " s");
            System.out.println("nochmal?");
            line = br.readLine();
      } while (line == "Ja");
    }

was soll da bitteschön falsch sein ;)

alcaeus 9. Nov 2004 21:54

Re: GoTo in java gibt es nicht... alternative?
 
Hi Nico,

hast du denn schon mal den Code mit einer while-do-Schleife probiert? Wenn er dann auch nicht funktioniert dann hast du definitiv eine verschrottete Eingabe. Lass sie dir mal ausgeben. Und falls es mit while-do funktioniert, dann hast du was beim Programmieren der do-while-Schleife verbockt, denn bei mir hat die immer funktioniert ;)

Greetz
alcaeus

Nicodius 9. Nov 2004 21:55

Re: GoTo in java gibt es nicht... alternative?
 
wie gesagt kenn ich mich mit den schleifen ja nicht aus ;) .. deswegen wollte ich ja eigentlich ne andere alternative (goto gibts ja nicht :cry: )

Strophi 9. Nov 2004 23:16

Re: GoTo in java gibt es nicht... alternative?
 
Hi Nicodius,

leider kommst Du wohl um die Schleifen nicht herum.

GOTO's gibts leider nicht? Ich bin froh, das es sie nicht gibt.

Ich hab' mal am C64-Basic Blut geleckt, hab' mir dann einen XT gekauft, und Turbo-Pascal auf 5-1/4-Zoll Disktten bekommen... Kein Goto. F***!!! Muß ich alles mit diesen S*****-Schleifen machen?!?

Ja. Es bringt was, zu versuchen, Goto's durch Schleifen zu ersetzen. Das ist der Abstraktionsschritt der Strukturierten Programmierung. Üb' sie Pascal, dem besten Freund des Jung-Programmierers, und lass' die Skills dann los auf andere Sprachen.

GOTO's finden sich heutzutage nirgends mehr...

Mir gehts nicht über die Hutschnur, das Du GOTO's erwähnst und verwendest, hab' ich auch mal gemacht, aber sich über 'profs' mit einen Augenzwickern lustig machen, und GOTO's 'witzig' finden, na, ich weiß nicht. Unwissen, und die resultierende Schelte sind Deine Schwäche, nicht die der scheltenden. Cool oder UnCool, das ist eine Frage des Alters. Und witziges Programmieren? Ich hab' mir beim Programmieren noch nie vor Lachen auf die Schenkel geschlagen...

Programmieren ist Fun UND hartes Brot..

mfg

Strophi

Hansa 10. Nov 2004 07:31

Re: GoTo in java gibt es nicht... alternative?
 
Zitat:

Zitat von Strophi
...Mir gehts nicht über die Hutschnur, das Du GOTO's erwähnst und verwendest, hab' ich auch mal gemacht...

Tja, die Hutschnur ist eben nicht lang genug. Der arme Nicodius kann aus natürlichen Gründen ja nicht wissen, daß man Goto's schon seit 20-30 Jahren nicht mehr verwendet. :mrgreen: Und selbst damals wurde das nur verwendet, mangels Alternativen. Aber es ist immer wieder lustig welche Fragen in einem Delphi Forum so auftauchen. Die Frage mit den Java-Gotos ließe sich wohl noch klären, aber nicht mehr die anschließende nach dem Anfang und Ende des resultierenden Spaghetti-Codes. :twisted:

PRehders 10. Nov 2004 07:51

Re: GoTo in java gibt es nicht... alternative?
 
Hallo zusammen,

es geht glaube ich deshalb nicht, weil Du nicht vergleichst, ob im String line "Ja" drinsteht, sondern Du vergleichst mit deinem Code die beiden Referenzen, und die sind nicht gleich. In Java ist ein String ein Objekt, auch ein Literal wie "Ja". Du musst also die eingebaute Funktion zum Vergleich des Inhalts(!) nehmen. Heisst glaube ich equals, also (aus dem hohlen Bauch geschossen :

Code:
while line.equals("Ja")
Probier's mal.

Bis dann

Peter

r_kerber 10. Nov 2004 07:52

Re: GoTo in java gibt es nicht... alternative?
 
Moin Leute,

Ihr habt Java vor Euch und nicht Delphi. :mrgreen:
Zitat:

Zitat von Nicodius
Code:
  public static void main(String[] args) throws Exception
    { 
      String line;
      BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
      int EingabeSec = 0;
      TimeMachine2 tm2 = new TimeMachine2();
      do
      { 
            System.out.println("Sekundeneingabe: ");
            line = br.readLine();
            EingabeSec = Integer.parseInt(line);
            tm2.SetsecondsIN(EingabeSec);
            tm2.transform();
            System.out.println(tm2.GetHours()+" h, " + tm2.GetMinutes() + " m, "+ tm2.GetSeconds() + " s");
            System.out.println("nochmal?");
            line = br.readLine();
      } while (line == "Ja");
    }

was soll da bitteschön falsch sein ;)

Der Vergleich line == "Ja" überprüft, ob zwei Objekte gleich sind, und das ist hier ja wohl nicht der Fall. Zum Vergleich der Zeichenketten gibt es die Methode CompareTo:
Code:
while (line.CompareTo("Ja"));

nailor 10. Nov 2004 08:04

Re: GoTo in java gibt es nicht... alternative?
 
chaotische GOTO sind ne qual, aber sinnvolle gotos können quellcode lesbarer machen, indem sie eine ünnötige klammerebene sparen.

choose 10. Nov 2004 09:23

Re: GoTo in java gibt es nicht... alternative?
 
Zitat:

Zitat von r_kerber
Der Vergleich line == "Ja" überprüft, ob zwei Objekte gleich sind

Genau das führt in der OOP oft zu Missverständnissen. Ein Objekt hat immer eine Identität, die in der Menge aller Objekte einzigartig ist und einen Zustand, der insbesondere bei identischen Klassen (ja, auch Klassen haben eine Identität inne (einige Sprachen betrachten sie als normale Objekte)!) zwischen unterschiedlichen (nicht-identischen) Objekten gleich sein kann.

Objekte können also per Definition gleich, wenn ihr Zustand gleich ist. Das kann in Java mithilfe der Methode Object.equals geprüft werden:
Code:
  AClass anObject = new AClass(aValue);
  AClass anotherObject = new AClass(aValue);

  // anObject is equal to anotherObject
  Assert(anObject.equals(anotherObject));
  Assert(anotherObject.euqals(anObject));
Zwei Objekte sind genau dann identisch, wenn sie dasselbe Objekt sind
Code:
  AClass anObject = new AClass(aValue);
  AClass anotherObject = anObject;
 
  // anObject same as anotherObject (identity)
  Assert(anObject == anotherObject);
  Assert(anotherObject == anObject);
Während dieses Prinzip in allgemeinen Klassen einsichtig sein sollte und von einem Java-Entwickler beherzigt wird, wenn er die equals-Methode überschreibt, scheint es bei anderen Datentypen etwas merkwürdig. Ursache der Missverständnisse ist die "stümperhafte" Umsatung der OOP in Java: Während Zahlen (int, double, etc.) mit gleichem Wert auch identisch sind aber auch nicht über "normale" Konstruktoren erzeugt werden, ist dies bei Strings nicht so! Es gibt in Java leider kein stringentes Konzept zu Objekt-Werttypen (ohne entsprechende Fabriken...), so dass Deine Anweisung
Code:
String aString = "Foo";
String anotherString = "Foo";
vergleichbar wäre mit
Code:
String aString = new String(aValue);
String anotherString = new String(aValue);
bei der Erzeugung der Art
Code:
String aString = aValue;
String anotherString = aValue;
hingegen währen aValue, aString und anotherString identisch...
Schöne Welt ;)

Nicodius 10. Nov 2004 15:08

Re: GoTo in java gibt es nicht... alternative?
 
@rainer ... das compare gibts irgendwie nicht :witch:


... aber PRehrds danke es geht aber nur mit
Code:
} while (line.equals("Ja"));
() müssen sein ;) vielen DANK!!


und danke choose für die oop-einführung ;) auch wenn ichs bei delphi kann ist das bei java schon GANZ anders weiles eben Nur objektorientiert ist ;)


:dp: und wieder mal wurde mir geholfen :dp:

:cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz