Java [For-Schleife] Variablendeklaration im Schleifenkopf

T

Tersus

Gast
Guten Tag,

mal schnell in die Runde gefragt: ist es unter Java möglich, Variablen unterschiedlichen Typs im Kopf der Schleife zu deklarieren?
Der Grund: Ich benötige für meinen Algorithmus 3 Variablen unterschiedlichen Typs, die nur innerhalb der Schleife gültig sein sollen.
Deklariere ich die Variablen außerhalb der Schleife, sind sind diese auch nach Ablauf der Schleife gültig.

Vielen Dank für die Info!

PS: Möglich ist natürlich noch ein anonymer Block mittels { ... }, fällt mir gerade ein! ;-D
 
Ich weiß nicht so recht, ob ich deine Frage richtig verstehe, aber könntest du nicht einfach eine Methode schreiben, die nur diese eine Schleife beinhaltet, mit lokalen Variablen natürlich, und die Methode dann später im weiteren Code aufrufen?

Ich denke, dass du innerhalb der Methode den Typ der Variablen deklarieren kannst, wie du lustig bist. Vielleicht hilft Dir ja das: http://www.mi.hs-rm.de/~schwan/Vorlesungen/Prog1/Skripte/Prog1US7.pdf

Gruß
MaLow
 
Zuletzt bearbeitet:
@Tumbleweed

natürlich.


Zu meinem Algorithmus gehört noch etwas mehr, als nur eine Schleife. Diese Schleife, also diesen Teil meines Algorithmus', in eine extra Methode auszulagern, würde den Zusammenhang unersichtlicher machen.
Zudem benötige ich die Schleife nur einmal. Dafür extra einen unnötigen Methodenaufruf durchführen, empfinde ich nicht als optimal.
 
Also das halte ich mal für eine steile These. Kann ich mir beim besten Willen nicht vorstellen. Vielleicht postest du mal konkreten Code.
 
Zuletzt bearbeitet:
Mit dem Schreiben einer Methode für diese eine Schleife würdest du aber auf Nummer sicher gehen, dass ihre lokalen Variablen nur dort gültig sind. Das wolltest Du doch :). Ich kann es auch nicht ganz beurteilen, da ich deinen Code/Algorithmus nicht kenne. Ich würde es sogar als übersichtlich empfinden dafür eine Methode zu schreiben. Methoden sind Funktionen.
 
Zuletzt bearbeitet:
Du meinst sowas in dieser Richtung?
for (int i=1, char c=0, double d; i <= 9; i++)
{
//dein code
}
 
fuchsi16 schrieb:
Du meinst sowas in dieser Richtung?
for (int i=1, char c=0, double d; i <= 9; i++)
{
//dein code
}

Genau das meine ich, nur leider meckert der Java-Compiler. ;-)


@Tumbleweed
Den Code kann ich leider nicht zeigen. Er ist zu exquisit. ;-) Aber ich behalte mir deine Anregungen im Hinterkopf.


Vielen Dank für eure Beiträge!
 
Du kannst die Variablen inklusive Schleife auch in ein eigenes { Scope } packen.
 
Warum ist dir der Scope dieser Variablen so extrem wichtig? In Java gibt es kein RAII, funktional gesehen ändert sich also rein gar nichts, und wenn du den Algorithmus sowieso schon als Spaghetti mit 100+ Zeilen schreibst (...was ja nicht unbedingt schlecht ist), ist dein Method-Scope mit ziemlicher Sicherheit ohnehin voll mit Zeug, das nicht überall gebraucht wird.

Eine mögliche Alternative wären eben, den Algorithmus doch in Einzelteile zu zerlegen und eine Zustandsklasse zu schreiben, die die global benötigten Daten als Member vorhält. Wäre Scope-mäßig das Sauberste, was mir jetzt einfällt.
 
Ich habe mir das Ganze noch einmal überlegt. Ihr habt doch recht.
Private Methoden werden vom Java-Compiler für gewöhnlich auch als inline behandelt, womit ich mir keine Gedanken über den extra Methodenaufruf machen muss.

Vielen Dank noch mal und auch viele Grüße.
 
Tersus schrieb:
Ich habe mir das Ganze noch einmal überlegt. Ihr habt doch recht.
Private Methoden werden vom Java-Compiler für gewöhnlich auch als inline behandelt, womit ich mir keine Gedanken über den extra Methodenaufruf machen muss.
Ist so oder so Unsinn.
Also grobe Richtschnur sollte man immer die Lesbarkeit des Quellcodes vor Optimierungen stellen.

Und im Zweifelsfall weiß der Compiler ohnehin besser wie Code zu optimieren ist. Vorallem weil im Fall Java ja es neben dem Bytecode-Compiler ja auch noch den JIT/Hotspot gibt.

Solche händischen Optimierungen machen erst Sinn, wenn Geschwindigkeit wirklich ein Problem ist. Aber auch da schaut man erst mit einem Profiler wo überhaupt die Engstellen sind.

Gruß
Andy
 
Zurück
Oben