Vereinfachte for-Schleife wird in umgekehrter Reihenfolge ausgewertet

polarpro

Mitglied
Hallo,

ich habe aus einem Calendar-Objekt ein Date-Objekt erstellt und lasse es mit den vier verschiedenen DateFormat-Styles per for-Schleife ausgeben. Die erste for-Schleife verwendet die Zählvariable i, die zweite for-Schleife ist vereinfacht:
Java:
import java.text.*;
import java.util.*;

public class BeispielDateFormat
{
	public static void main(String[] args)
	{
		int[] styles = {DateFormat.SHORT, DateFormat.MEDIUM, DateFormat.LONG, DateFormat.FULL};
		
		Calendar cal = Calendar.getInstance();
		Date dat = cal.getTime();
		System.out.println(dat);
		System.out.println();
		
		//1. mit for-Schleife incl. Zaehlvariable
		for(int i=0; i<styles.length;i++)
		{
			DateFormat df = DateFormat.getDateInstance(i);
			System.out.println(i + "   " + df.format(dat));
		}
		System.out.println();
		
		//2. mit vereinfachter for-Schleife
		for(int style:styles)
		{
			DateFormat df = DateFormat.getDateInstance(style);
			System.out.println(df.format(dat));
		}
	}
}
Das Ergebnis ist:
Code:
Sat Dec 03 18:05:22 CET 2011

0   Samstag, 3. Dezember 2011
1   3. Dezember 2011
2   03.12.2011
3   03.12.11

03.12.11
03.12.2011
3. Dezember 2011
Samstag, 3. Dezember 2011
Das Seltsame ist, dass die for-Schleife mit Zählvariable das Feld styles in umgekehrter Reihenfolge auswertet. Die Zählvariable i ist in der erwarteten Reihenfolge ausgewertet (0,1,2,3); die Ausgabe des Datums verwendet jedoch nicht SHORT, MEDIUM, LONG, FULL, sondern FULL, LONG, MEDIUM, SHORT. Eigentlich müsste das Ergebnis doch das gleiche sein wie bei der vereinfachten for-Schleife. Irgendwas hab ich wohl übersehen... Weiß jemand, was? ???:L
 
Schau dir mal Zeile 18 ganz genau an.

Meinst du vielleicht
Code:
DateFormat.getDateInstance(*styles*[i])
?
 
btw : der fachbegriff für dieses "vereinfachte" for() ist

foreach

nur damit du mal den richtigen fachbegriff hast falls du mal was bei google suchen willst

was dein code angeht : in deiner ersten for() verwendest du dein array garnicht ... sondern übergibst dierekt den counter ...

richtig müsste es in der erste for() so heißen

Java:
DateFormat df = DateFormat.getDateInstance(styles[i]);
 
Vielen Dank. Stimmt, da hatte ich ja gar kein styles in der Zählanweisung. Ähem...

Was mich allerdings wundert, ist dass da doch irgendwie etwas gezählt wurde, schließlich gibt die for-Schleife mit Zählvariable nacheinander alle vier DateFormat-Stile aus.
 
ist dein grundproblem jetzt erstmal behoben ? also geben jetzt beide for() das selbe aus ?

wenn ja : was meinste du da bitte mit deinem post ... welche for() soll was zählen ?

wenn nein : sag uns bitte wie es atm ist und wie der code aussieht damit man helfen kann
 
Was mich allerdings wundert, ist dass da doch irgendwie etwas gezählt wurde, schließlich gibt die for-Schleife mit Zählvariable nacheinander alle vier DateFormat-Stile aus.
Die DateFormat-Stil-Konstanten sind auch nichts weiter als int-Werte, und rein zufällig 0,1,2 und 3. In deinem Array stehen sie (auch rein zufällig) in umgekehrter Reihenfolge.
 

Neue Themen


Zurück
Oben