# for-Schleife



## x22 (6. Mrz 2012)

[SlaterB: abgespalten aus http://www.java-forum.org/java-basics-anfaenger-themen/132999-zaehlungen-per-schleife.html ]




M_Schaffrath hat gesagt.:


> Du hast auch die Möglichkeit, die Zählvariable im Schleifenkopf zu deklarieren:
> 
> ```
> for(int i = 0; i < 100; i++)
> ...




vergiss das lieber schnell wieder, kein guter Programmierstil!


----------



## njans (6. Mrz 2012)

What? 
Seit wann ist denn das kein guter Programmierstil?
Wenn du die Variable nicht weiter brauchst, dann gehört sie direkt in den Kopf der For Schleife.


----------



## irgendjemand (6. Mrz 2012)

@x22
da würd ich dir aber auch wiedersprechen

wenn man für ein for-loop einen counter-braucht ... und auch nur innerhalb dieses loops ... oder noch banaler wirklich nur dierekt als counter ... dann wird dieser sehr wohl im head definiert ... was eben den vorteil hat das dieser counter dann auch nur innerhalb des loops existiert ...


[OT]ich weis zwar nicht wo du immer deine kontra-argumente her hast ... aber irgendwie hast du an allem was hier von leuten kommt die sicherlich sehr viel erfahrung mit programmieren im allgemeinen und java im speziellen haben etwas auszusetzen ...
daher mal die kontra-frage an dich : woher hast du die infos das das was hier gang und gebe und vor allem jahre lange praxis in produktivem umfeld ist angeblich alles schlecht wäre ?
ich verstehe es einfach nicht ... möchte mal das (grundlagen-)buch sehen wo das drin steht das [c]for(int i=0; i<10; i++)[/c] schlechter stil wäre ...[/OT]


----------



## x22 (6. Mrz 2012)

Man kann es machen, ist aber in meine Augen und hier in allen Projekten nicht erwünscht.
Woher ich das habe: hm vor xx Jahren aus der Berufsschule. Seitdem habe ich es auch immer wieder gesehen in Partnerprojekten etc. dass dies nur sehr selten der Fall ist und es immer heisst man solle es vermeiden.


Edit: Ich glaube ihr versteht das falsch.

Die Initialisierung soll innerhalb der for-Schleife erfolgen i=1 o.ä.
Was kein guter Stil ist, ist zu schreiben: int i=1;

Die Variable vom Typ Integer soll vor der Schleife deklariert werden, initialisiert in der Schleife (Schleifenkopf).

Sprich vor der Schleife:


```
public static void main(String[] args) {
		int i=0;
		
		for(i=1; i<5; i++){
			System.out.println(i);
		}
		
	}
```


----------



## pg1337 (6. Mrz 2012)

Das stimmt.
Haben das in der Berufsschule auch gehabt.
Gab sogar Abzug in den Arbeiten für, da dort einem gesagt wird das dies kein guter Stil ist.
Hättet ihr wohl auch mal eine Ausbildung zuerst machen sollen als FI


----------



## Gossi (6. Mrz 2012)

Aber wozu, dann bleibt i solange liegen, wie die Methode besteht, sowas kann zu bösen Verwechslungen führen.

for(int i = 0...... ist eigentlich immer das Mittel der Wahl, wenn es um Counter geht, die nur in der for-Schleife benutzt werden...

Zudem sollte normalerweise gelten:

Schulstoff < Produktionsstandardts (wenns allgemein gültige sind)

Ist nicht das erste aus der Schule was ich ganz schnell vergessen habe


----------



## faetzminator (6. Mrz 2012)

x22, und wer hat das warum _vor langer Zeit_ gesagt? Ich hab sowas noch nie gehört. Und anhand der Zeit (_vor xx Jahren_) hab ich eindeutig nach dir die Ausbildung abgeschlossen...

Edit: hab da was gefunden für C++: Programming Style Guide - wxWidgets. Aber nur weil damals irgendwelche Compiler abf*ckten, ist das noch lange kein Grund, das die nächsten 700 Jahre so zu schreiben :autsch:


----------



## x22 (6. Mrz 2012)

Gossi hat gesagt.:


> Aber wozu, dann bleibt i solange liegen, wie die Methode besteht, sowas kann zu bösen Verwechslungen führen.
> 
> for(int i = 0...... ist eigentlich immer das Mittel der Wahl, wenn es um Counter geht, die nur in der for-Schleife benutzt werden...




wie kann das zu einer Verwechslung führen?
Kannst doch immer neu initialisieren in jeder neuen Schleife.


Edit: 2001. Wie gesagt, wird hier nicht gern gesehen und finde, dass man das auch keinem Anfänger vorschlagen sollte.

Auswirkungen hat das keine, ist aber in meinen Augen schon fast eine Konvention.


[EDIT]





faetzminator hat gesagt.:


> Edit: hab da was gefunden für C++: Programming Style Guide - wxWidgets. Aber nur weil damals irgendwelche Compiler abf*ckten, ist das noch lange kein Grund, das die nächsten 700 Jahre so zu schreiben :autsch:


Compiler stürzen da ja nichtmehr ab heute, siehe mein Edit in dem Post (Konvention)[/EDIT]


----------



## jgh (6. Mrz 2012)

x22 hat gesagt.:


> Man kann es machen, ist aber in meine Augen und hier in allen Projekten nicht erwünscht.
> ...
> Was kein guter Stil ist, ist zu schreiben: int i=1;
> ...



Dann schau dir mal die Insel an, oder 
1. Google Treffer zu "java for Schleife"
3. Google Treffer zu "java for Schleife"
4. Google Treffer zu "java for Schleife"

Also ich behaupte mal Konvention ist genau das Gegenteil vom dem, was du sagst.

PS: Der 2. Google Treffer ist nicht dabei, da ich dort kein konkretes Bsp finden konnte


----------



## xehpuk (6. Mrz 2012)

Es ist doch selbstverständlich, dass man den Scope so klein wie möglich hält.

Sonst würde man statt Parameter und lokaler Variablen einfach Klassenvariablen verwenden.


----------



## DanZ (6. Mrz 2012)

x22 hat gesagt.:


> Edit: 2001.



Als würde man mit Erkenntnissen zum Buchdruck aus dem Mittelalter Farbdrucker kritisieren...

Das war vielleicht mal... eventuell aus Performance Gründen... irgendwann mal guter Stil. Heute ist das vollkommen irrelevant für die Performance und es ist besserer Stil für jede Schleife einen neuen Counter zu deklarieren(solange die nicht in einem sehr sehr engen Zusammenhang stehen, aber das ist absolute Außnahme), weil dieser Counter eben an der Schleife hängt. Und man abgesehen davon so viel übersichtlicher hat um welchen Typ es sich da handelt. Und und und... . Variablen sollten immer auf den Minimalscope reduziert werden.


----------



## njans (6. Mrz 2012)

Das ist anscheinend wieder so ein altertümlicher Brauch, wie die Underscore Notation. Früher mal sinnvoll, heute obsolet.
Nebenbei ist es unsinnig Variablen mehr Sichtbarkeit einzuräumen, als sie benötigen.


----------



## x22 (6. Mrz 2012)

jgh hat gesagt.:


> Dann schau dir mal die Insel an, oder
> 1. Google Treffer zu "java for Schleife"
> 3. Google Treffer zu "java for Schleife"
> 4. Google Treffer zu "java for Schleife"
> ...




Zum 3. Treffer, 2 Beispiel:


```
public class TwoNumbersLoop {
    public static void main(String args[])
        int i, j;
		  for (i = 0, j = 100;
             i <= j;
             i = i + 2, j = j - 3) {
            System.out.println(j
                    + " ist noch nicht kleiner als " + i);
        }
    }
}
```

steht mal so mal so im Netz. Ist trotz allem, nachdem was ich vor Jahren gelernt habe, obgleich Ausbildung, Studium (Selbst da hat der Prof. gesagt, er bevorzugt die Deklaration außerhalb (Karlsruhe)) und in der Firma so, wie ich es geschrieben habe.

Abgesehen davon müsste man dann in dem Beispiel das so schreiben:


```
public static void main(String args[]){
		   
		  for (int i = 0, j = 100;
            i <= j;
            i = i + 2, j = j - 3) {
           System.out.println(j
                   + " ist noch nicht kleiner als " + i);
       }
   }
```


----------



## pg1337 (6. Mrz 2012)

Warum wollen die das in der Berufsschule dann so und geben sogar punkt-Abzug?


----------



## irgendjemand (6. Mrz 2012)

@x22

lolw00t ... sorry ... aber nur weil dir mal jemand damals in der berufsschule gesagt hat das er persönlich das nicht gut findet ... und euch bestraft hat wenn ihr es trotzdem getan habt *in anlehnung an pg1337* ... und irgendwelche C++ compiler das selbst bis heute nicht auf die reihe bekommen ... sorry ... aber dann hattest du einfach einen ziemlich schlechten lehrer ...

und warum es in deinem arbeitsumfeld ebenfalls so ist ... na ich will es eigentlich gar nicht wissen oder hinterfragen ...


aber wie hier bereits von anderen erwähnt : es ist gängige praxis einen counter für ein for-loop auch dierekt in dessen head zu DEKLARIEREN ...
wenn du eine variable außerhalb eines loops deklarierst *nur mal so : man kann einen primitiven datentypen NICHT initialisieren ... da primitive datentypen NICHT "null" sein können* ... dann wird 1) sein scope erweitert ... welchen man laut conventions so klein wie möglich halten soll ... und 2) ist damit die "lebenszeit" und damit die zeit in der RAM von dieser variable verbraucht wird erheblich verlängert *mindestens bis zum ende des blocks* ...

und DAS ... dieses "großer scope" und "lange lebenszeit" ist nach conventions eben zu vermeiden ... und damit steht die aussage "counter außerhalb des loops deklarieren" im dierekten widerspruch mit den conventions ... wesshalb es in meinen augen sehr wohl richtig ist einem anfänger genau diese schreibweise [c]for(int i=0; i<10; i++)[/c] deinem käse vorzuschlagen ... weil es genau so nämlich conventions conform ist ... was deins nun mal nicht wäre ...


----------



## faetzminator (6. Mrz 2012)

x22, dein Edit hab ich gesehen. Das was du sagst, sagt genau auch mein Link aus. Aber hast du diese Konvention damals in Java oder in C++ (oder was anderem) gelernt? Ich denk eher, dass die Konvention vielleicht von älteren C/C++ Entwicklern wegen eben eines wie von mir geposteten Grundes kommt.


----------



## DanZ (6. Mrz 2012)

pg1337 hat gesagt.:


> Warum wollen die das in der Berufsschule dann so und geben sogar punkt-Abzug?



Bei uns gabs im Abi Punktabzug wenn wir statt "Schlange" "Queue" geschrieben haben... noch Fragen?


----------



## x22 (6. Mrz 2012)

njans hat gesagt.:


> Das ist anscheinend wieder so ein altertümlicher Brauch, wie die Underscore Notation. Früher mal sinnvoll, heute obsolet.
> Nebenbei ist es unsinnig Variablen mehr Sichtbarkeit einzuräumen, als sie benötigen.




Das mit der Sichtbarkeit ist grade erstmal nebensächlich in dem Beispiel.


----------



## irgendjemand (6. Mrz 2012)

DanZ hat gesagt.:


> Bei uns gabs im Abi Punktabzug wenn wir statt "Schlange" "Queue" geschrieben haben... noch Fragen?



ich glaube dem , der da punkt-abzug gibt nur weil man den richtigen klassen-namen schreibt , ist echt nicht mehr zu helfen

*made my day*


----------



## pg1337 (6. Mrz 2012)

DanZ hat gesagt.:


> Bei uns gabs im Abi Punktabzug wenn wir statt "Schlange" "Queue" geschrieben haben... noch Fragen?



Glaub ich dir nicht.


----------



## irgendjemand (6. Mrz 2012)

x22 hat gesagt.:


> Das mit der Sichtbarkeit ist grade erstmal nebensächlich in dem Beispiel.



ähm .. NEIN ... weil *wie oben bereits gesagt* laut conventions der scope immer so klein wie möglich zu halten ist


----------



## x22 (6. Mrz 2012)

irgendjemand hat gesagt.:


> ähm .. NEIN ... weil *wie oben bereits gesagt* laut conventions der scope immer so klein wie möglich zu halten ist




das ist völlig offtopic grade. Aber um den TO nochmehr zu verwirren, als sowieso schon ändere ich dir das gerne, er weiss bestimmt auch schon über die Sichtbarkeiten Bescheid, packages etc.


----------



## jgh (6. Mrz 2012)

richtig formatiert sieht es auch wieder normal aus:


```
for (int i = 0, j = 100; i <= j; i = i + 2, j = j - 3) {
			System.out.println(j + " ist noch nicht kleiner als " + i);
		}
```

aber das ist ein Kampf gegen Windmühlen...wenn es der Lehrer in der Berufsschule so gesagt hat...na dann ist es halt so


----------



## pg1337 (6. Mrz 2012)

Manche Leute sind glaube ich nur Post geil?! krass....


----------



## njans (6. Mrz 2012)

Bezüglich deiner Berufsschule:
In meiner Uni wird generell die Underscore Notation für Exemplarvariablen erwartet. Nun, das kommt daher, dass vor guten IDEs wie Eclipse Exemplarvariablen eben nicht so einfach zu unterscheiden waren. Da IDEs das nun aber abnehmen, indem sie das highlighten, ist diese Schreibweise redundant. Dennoch wird es in der Uni gemacht, auch in Projekten von Unternehmen, bei denen diese Professoren Einfluss haben/gehabt haben. Das ändert aber nichts daran, dass es redundant ist. Die Leute sind einfach nur so gewöhnt daran, dass sie es weiter machen.


----------



## DanZ (6. Mrz 2012)

pg1337 hat gesagt.:


> Glaub ich dir nicht.



Oh doch (also es ging um die allgemeine Bezeichnung dieses Datentyps, nicht um die Klasse). Das Kultursministerium war der Meinung man müsste uns im Unterricht diese bösen Anglizismen abgewöhnen .Weil das nicht funktioniert hat, unser Lehrer das aber sehr unterstützenswert fand meinte er er könne das ja mal durch etwas schlagfertigere Methoden erzwingen -.-


----------



## irgendjemand (6. Mrz 2012)

da wir ja hier eh ziemlich OT werden könnte man TO doch zur abwechslung mal mit zwei verschatelten for-loops nerven ...
dann erkennt man vielleicht auch das scope-problem


```
public class Count
{
	public static void main(String[] args)
	{
		for(int i=1; i<=10; i++)
		{
			for(int j=i; j<=(i*5); j+=i)
			{
				System.out.print(j+" ");
			}
			System.out.println("");
		}
	}
}
```

ergibt die ausgabe


```
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
6 12 18 24 30
7 14 21 28 35
8 16 24 32 40
9 18 27 36 45
10 20 30 40 50
```


----------



## Gossi (6. Mrz 2012)

x22 hat gesagt.:


> das ist völlig offtopic grade. Aber um den TO nochmehr zu verwirren, als sowieso schon ändere ich dir das gerne, er weiss bestimmt auch schon über die Sichtbarkeiten Bescheid, packages etc.



Es ist doch egal ob er über Packages etc bescheid weiß, oder sagst du zu nem Anfänger auch, Code schreiben is ok, aber Compillieren nicht, du kennst weder den Debugger, noch weißt du was der Compiler genau und wie macht?

Es ist nunmal so, dass laut den Conventions, die Variante [c]for(int i = 0; i < 10; i++)[/c] deiner Variante vorzuziehen ist und das hier solch eine verwirrung herrscht, liegt zu einem teil auch an dir.

Ich habe zwar selber nicht viele Erfahrungen in Java, aber trotzdem kenne ich die Conventions und versuche mich daran zu halten und jedem der mich fragt, einen Convention-gerechten Code zu geben, das hat nichts mit bequemheit oder faulheit zu tun, noch damit ob der gegenüber Packages oder sonsitges kennt.

Die Projekte die ich mit meinem Kumpel zusamen mache (erstes Lehrjahr) sind auch mit Packages, ich habe ihm erzählt wofür sie sind und warum wir sie benutzen. Und genau so ist es hier auch, die Conventions wurden nicht einfach nur zum Spaß entworfen und nur weil vor mir ein Anfänger sitzt, sind sie mir nicht egal.

Und zum Tehma offtopic, dies ist ein Forum und die momentan diskussion ist aus dem Thema entstanden, soooo offtopic is des nu auch nicht.


----------



## x22 (6. Mrz 2012)

faetzminator hat gesagt.:


> x22, dein Edit hab ich gesehen. Das was du sagst, sagt genau auch mein Link aus. Aber hast du diese Konvention damals in Java oder in C++ (oder was anderem) gelernt? Ich denk eher, dass die Konvention vielleicht von älteren C/C++ Entwicklern wegen eben eines wie von mir geposteten Grundes kommt.



C++.
Habe auch nicht mit Java angefangen, jedoch jetzt schon seit gut 7 Jahren dabei und die Convention von c beibehalten


----------



## bone2 (6. Mrz 2012)

pg1337 hat gesagt.:


> Warum wollen die das in der Berufsschule dann so und geben sogar punkt-Abzug?



hey mein berufsschullehrer in anwendungssyste vor einem halben jahr:
anfang 2. lehrjahr, billiges strukturiertes konsolen programm zur berechnung von mehrwertsteuer
ich habs schnell in eclipse getippt und war nach 5 min fertig und er kam verdutzt gucken und wollte ne vorführung, also auf den Grünen Play Pfeil gedrückt...


> Oh da sieht man aber den Sourcecode über der Ausgabe, das ist nicht gut für den Anwender.






na dann haben wir ja dein problem erkannt:


x22 hat gesagt.:


> C++.
> Habe auch nicht mit Java angefangen, jedoch jetzt schon seit gut 7 Jahren dabei und die Convention von c beibehalten


nicht lernwillig?


----------



## irgendjemand (6. Mrz 2012)

x22 hat gesagt.:


> C++.
> Habe auch nicht mit Java angefangen, jedoch jetzt schon seit gut 7 Jahren dabei und die Convention von c beibehalten



und genau DAS ist atm das problem : du versuchst einem JAVA anfänger C conventions aufzuzwängen ... was zwar in erster linie ziemlich verwirrung stiftet ... aber ansich grundlegend FALSCH ist ...
JAVA hat seine eigenen conventions ...

wenn DU nicht bereit dazu bist dir diese anzugewöhnen ... dann ist das dein persönliches problem ... aber bitte verwirre anfänger nicht mit falsch-aussagen ...

wie Gossi schrieb : nach JAVA conventions ist es in JAVA vorzuziehen die variable im loop-head zu deklarieren ...
wenn die C convetions etwas anderes für C besagen ... dann soll das auch bitte bei C bleiben ...

*bitte auch gleich zusammen mit dingen wie "_" im variablen namen oder "I" zur kennzeichnung von interfaces*

das sind einfach regeln die hier überhaupt nicht hergehören weil sie einer völlig anderen programmiersprache entstammen ...

[OT]da ich jetzt den grund kenne warum du einiges anderst machen willst / einiges nicht so top findest was du hier findest ... nämlich weil du C convetions auf JAVA anwenden willst ... würde ich dich dann doch im persönlichen und bestimmt auch im allgemeinen interesse lediglich bitten dir anzugewöhnen JAVA convetions anzuwenden wenn es um JAVA geht ...[/OT]

welch verwirrung du bei einem anfänger damit anstiften kannst siehst du hier ja deutlich


----------



## x22 (6. Mrz 2012)

Wie gesagt, seit 7 Jahren wird in unsrer Firma so programmiert, bei der deutschen Bank hab ich auch schon mitgeholfen und anderen großen Projekten.

Weiß nicht wieviel Erfahrung du hast aber scheinst mir eher ein etwas jüngerer, oft in seinen posts ziemlich aggressiver Mensch zu sein.

Und das hat nichts mit c conventions zu tun wenn in meinen Fachbüchern das mal so mal so steht.

Die Verwirrung ist durch die Leute entstanden, die gemeint haben es reicht nicht wenn 2 Leute was dazu schreiben, sondern postgeil(Zitat pg1337), was ich nur bestätigen kann denken sie könnten mich hier verunsichern o.ä.
Ich glaube kaum dass ein 1 lehrsjahrsazubi schon jegliche Conventions kennt.
Ich glaube kaum, dass ein irgendjemand schon, nach der Art und weise wie du schreibst,
In Raketensoftwareprojekten, Banken o.ä. Programmiert hat.

Mein anfänglicher Post war ein Hinweis darauf, dass es, wie ich es kenne nicht üblich ist, die Schleife so zu schreiben.

Und an denjenigen, bin zu faul jetzt den Namen am Handy rauszusuchen , der meinte ich würde mich. Icht umstellen wollen oder sowas in der Art.. Schwachsinn Programmier erstmal in grossen Java Projekten mit, mit ein paar tausend Anwendungsentwicklern bevor du meinst ich würde hier nur was erfinden und es von c übernehmen .

Over And out


----------



## DanZ (6. Mrz 2012)

Sorry, dass ich das mal so deutlich sagen muss, aber die Arroganz und die Gehaltlosigkeit deines Beitrags lässt - ganz unabhängig von der Frage wer jetzt fachlich recht hat - die vermeintliche Aggression aller anderen ziemlich angemessen erscheinen.

GilbertGrape hat ein an dieser Stelle der passendes Zitat in der Signatur:



> Erfahrung heißt gar nichts Man kann seine Sache auch 35 Jahre schlecht machen.(Tucholsky)



Ich mag vielleicht nicht mit tausenden Entwicklern an einem Projekt gearbeitet haben, aber war schon an genug größeren Projekten mit externen Partnern beteiligt um zu wissen, dass Totschlagargumente alà "Das haben wir schon immer so gemacht", "Du bist viel zu jung um das zu beurteilen" oder "Erreich erstmal das, was ich erreicht hab, und dann kannst du da mitreden" grundsätzlich immer und nur dann auf zur Sprache kommen, wenn es keine richtigen Gründe gibt. Abgesehen davon sind sie totaler Schwachsinn. Es gibt 15 Jährige die mehr Ahnung von Java haben als manch projektleitender Seniordeveloper.
Ganz besonders abstrus wird das in deinem letzen Satz. Die Beteiligung an solchen Projekten hat doch absolut keinen Zusammenhang damit, ob du dich umstellen willst oder nicht.
Egal was wir im Laufe der Diskussion alle geschrieben haben - polemisch, persönlich, übertrieben, unangemessen - es war immer irgendwie halbwegs bemüht sachlich auf die ursprüngliche Frage bezogen... und diesen Rahmen hast du meines Erachtens grade deutlich verlassen (und ich befürchte damit erfolgreich die eigentliche Diskussion abgewürgt).


----------



## Ebenius (6. Mrz 2012)

x22 hat gesagt.:


> […]Schwachsinn Programmier erstmal in grossen Java Projekten mit, mit ein paar tausend Anwendungsentwicklern bevor du meinst ich würde hier nur was erfinden und es von c übernehmen .


Ich programmiere seit 12 Jahren in großen Projekten hauptberuflich Java. Ich hoffe das qualifiziert mich hinreichend um etwas zu sagen. In C muss man Deklarationen an den Anfang eines Compound Statements setzen. Und daher kommt auch dieser Stil. Ich kenne Firmen die aufgrund der großen Sprachvielfalt im Unternehmen und ihrer sprachlichen Herkunft Quelltextstile aus einer in die andere Sprache übernehmen, obwohl diese Konstrukte in der anderen Sprache ansonsten unüblich sind.

Das selbe passiert auch mit Entwicklungswerkzeugen; ich kenne beispielsweise eine große Firma (Hersteller von Telekommunikations-Hardware) die es ihren Entwicklern vorgeschrieben hat, Java mit dem Emacs zu programmieren. Der einzige dafür vorhandene Grund war, dass das schon immer so gemacht wurde. Das war im Jahr 2004, keine Ahnung, ob dies noch immer so ist. Vielleicht betraf es auch nicht den ganzen Konzern sondern nur einige Entwicklungsabteilungen. In jedem Fall: Die Angestellten dieser Abteilung haben ausschließlich Java programmiert, aber der Chef hatte über 20 Jahre C-Erfahrung.

In Java ist die üblichste Form einer [c]for[/c]-Schleife die die ihre Laufvariable im Initialisierungsblock des Schleifen-Kopfes deklariert. So kenne ich es aus allen Tutorien, aus Lehrbüchern zu meiner SCJP-Prüfung und aus allen von Sun stammenden JDK-Quelltexten. Beispiele:

Seit Java 1.1: java.lang.String.replace(char, char) 
	
	
	
	





```
for (int j = 0 ; j < i ; j++) {
```

Seit Java 1.2: java.lang.String.CaseInsensitiveComparator.compare(String, String): 
	
	
	
	





```
for (int i1=0, i2=0; i1<n1 && i2<n2; i1++, i2++) {
```

Seit Java 1.5: java.lang.String.String(int[], int, int) 
	
	
	
	





```
for (int i = 0; i < count; i++) {
```

BTW: Ich kann mich meinem Vorredner nur anschließen. Dein Tonfall ist grenzwertig.

Ebenius


----------



## irgendjemand (6. Mrz 2012)

[OT]ich enthalte mich jetzt mal einer meinung zum letzten post von x22 ...
bis auf die bemerkung : das was du bringst sind lediglich totschalgargumente
wie ich dir bereits sagte : wenn DU dir C conventions angewöhnt hast ... dann verwende diese auch bitte ausschließlich bei C ...
in java gibt es allerdings andere conventions ... und an die sollte man sich schon halten wenn es um eine java-spezifische frage geht ...
und auch wie bereits mehrfach von mitlerweile mehreren usern erwähnt ist die lösung nach java conventions , nämlich den counter dierekt im loop-header zu deklarieren , deiner lösung vorzuziehen ...
wenn du das selbst nicht einsiehst und diese posts welche eigentlich nur DIR helfen wollen mit sprüchen totschlägst wie : "ich mach das immer so und in meinem umfeld wird es auch so gemacht" ... dann ist es dein persönliches problem ...

aber unterlasse dann bitte diese fehl-informationen ... auch wenn sie nach deinen gewohnheiten "guter stil" sein mögen ... ist das meiste was von dir bis jetzt an kritik *auch in vielen anderen threads* kam darauf zurückzuführen das du schlicht die falschen conventions anwenden willst ...
wenn du dann darauf hingewiesen wirst *und das von leuten die sich an die java coventions halten* blockst du diese ab ...

und da frage ich mich jetzt wirklich : wer uns beiden ist jetzt das größere kind :

ich mit meinen 21 jahren der sich hobby-mäßig seit gut 7 jahren mit java beschäftigt und andere user auf solche fehler *wiederholt* hinweist ...
oder du mit deinem alter der solche "hilfe" nur abblockt ...

denk mal drüber nach[/OT]


----------



## faetzminator (6. Mrz 2012)

Was mich anbelangt:



x22 hat gesagt.:


> Ich glaube kaum dass ein 1 lehrsjahrsazubi schon jegliche Conventions kennt.


Bin kein Azubi - war mal einer.


x22 hat gesagt.:


> Ich glaube kaum, dass ein irgendjemand schon, nach der Art und weise wie du schreibst,
> In Raketensoftwareprojekten, Banken o.ä. Programmiert hat.


Arbeite seit Jahren in letzerem.



x22 hat gesagt.:


> Mein anfänglicher Post war ein Hinweis darauf, dass es, wie ich es kenne nicht üblich ist, die Schleife so zu schreiben.


Lies den konstruktiven Post von Ebenius dazu.

Es gibt sicherlich immer wieder Halbwahrheiten, welche überall verbreitet werden. Aber dass man in Java die Zählervariable vor der for-Schleife deklariert, das ist 100% nicht korrekt - zumindest pauschal gesagt. Wenn man komplexeren Code hat, kann man sich immer überlegen, das zu vereinfachen.


----------



## Gossi (7. Mrz 2012)

x22 hat gesagt.:


> Wie gesagt, seit 7 Jahren wird in unsrer Firma so programmiert, bei der deutschen Bank hab ich auch schon mitgeholfen und anderen großen Projekten.



Ich arbeite seit 3 1/2 Jahren (bin jez 20) mit Java in einem Rechenzentrum



x22 hat gesagt.:


> Weiß nicht wieviel Erfahrung du hast aber scheinst mir eher ein etwas jüngerer, oft in seinen posts ziemlich aggressiver Mensch zu sein.



So magst du irgendjemand vielleicht kennen gelernt haben, normalerweise ist er anders, er mag nur keine ignoranz.



x22 hat gesagt.:


> Und das hat nichts mit c conventions zu tun wenn in meinen Fachbüchern das mal so mal so steht.



Dann sieh dir die momentanen standardt Werke an:
Java von Kopf bis Fuß
Java ist auch nur eine Insel
Die Dokumentationen von Oracle und deren Beispiele

Da sind die for-Schleifen immer nach dem von dir als "falsch" notierten Muster aufgebaut, zufall?



x22 hat gesagt.:


> Die Verwirrung ist durch die Leute entstanden, die gemeint haben es reicht nicht wenn 2 Leute was dazu schreiben, sondern postgeil(Zitat pg1337), was ich nur bestätigen kann denken sie könnten mich hier verunsichern o.ä.



Wir wollen dich nicht verunsichern, wir wollen dich darauf hinweisen, dass es uns egal ist was bei dir in den Projekten normal ist, entweder du hälst dich hier im Forum an die gültigen Conventions oder lässt den Leuten den Vortritt, die zwar nicht zwangsläufig mehr erfahrung haben, aber einen guten Programmierstil und deiner, ist es bestimmt nicht.



x22 hat gesagt.:


> Ich glaube kaum dass ein 1 lehrsjahrsazubi schon jegliche Conventions kennt.
> Ich glaube kaum, dass ein irgendjemand schon, nach der Art und weise wie du schreibst,
> In Raketensoftwareprojekten, Banken o.ä. Programmiert hat.



Es ist doch egal ob er die Conventions kennt oder nicht, wenn er sie nicht kennt, muss man sie ihm beibringen. Und nur weil jemand an einer Software für Racketen oder Banken arbeitet, muss er nicht umbedingt gut sein :bahnhof:



x22 hat gesagt.:


> Mein anfänglicher Post war ein Hinweis darauf, dass es, wie ich es kenne nicht üblich ist, die Schleife so zu schreiben.



Und mittlerweile kämpfst du gegen mehrere Java Programmierer an und sagst uns allen wir haben einen schlechten Programmierstil 



x22 hat gesagt.:


> Und an denjenigen, bin zu faul jetzt den Namen am Handy rauszusuchen , der meinte ich würde mich. Icht umstellen wollen oder sowas in der Art.. Schwachsinn Programmier erstmal in grossen Java Projekten mit, mit ein paar tausend Anwendungsentwicklern bevor du meinst ich würde hier nur was erfinden und es von c übernehmen .



Wie gesagt, programmier mal in einer Firma die sich an Java Conventions hält, deine schier endlose Arroganz hängt mir mittlerweile zum Hals raus und es ist denke ich mal besser für die Anfänger die es hier im Forum gibt, wenn du:

Dich an die Conventions hälst
Du nur allgemeine Tipps gibst
Darauf hinweist, dass dein Quellcode nicht Convention konform ist oder
Du dich ausloggst, tief einatmest und in ein C-Forum abdüst



x22 hat gesagt.:


> Over And out




```
System.exit(0);
```


----------



## x22 (7. Mrz 2012)

Wieso schreibt hier jetzt jeder, wo er arbeitet und was er da macht?
Wenn ich das seit Jahren so mache und es mir immer gesagt wurde, kann ich ja nur die Information weiter geben, oder?

Zu meinem Tonfall: Nur angepasst an @irgendjemand.

Also Leute mich interessiert es jetzt auch nicht wo ihr arbeitet, wer oder was ihr seit.
Ich wollte mein Wissen weiter geben, wenn mir mein Wissen über ein Jahrzehnt so beigebracht wurde und ich überall die Erfahrung so gemacht habe, woher soll ich das wissen?

Das kann man auch netter sagen, als dass jetzt 10 Leute herkommen und mich mit irgend einem , teilweise aggressiven Mist ,zutexten. An die, die mich nett darauf hingewiesen haben, danke. An den Rest.. würdet ihr so mit eurem Chef reden? Habe auch noch anderes zu tun, als hier Lebensgeschichten zu lesen.

Mein Tonfall ist idR nicht arrogant, nur man schaue sich mal die Beiträge von irgendjemand an, die mehr als grenzwertig auch in anderen Threads sind.. und man verstehe meine Reaktion dadrauf.

Auf einen Fehler hinweisen ist ok, 10 Leute die versuchen auf einem rumzuhacken ist widerum nicht in Ordnung, wovon ich mich aber auch nicht beeinflussen lasse.

Der Mensch soll lernen, nur die Ochsen bueffeln.
(Erich Kaestner) .

Der Mensch passt sich an die Gegebenheiten hat, wiederholt oftmals, doch bringt nicht neue Argumente. -> Zum Thema "Arroganz", Schwachsinn:lol:


----------



## x22 (7. Mrz 2012)

irgendjemand hat gesagt.:


> [OT]ich enthalte mich jetzt mal einer meinung zum letzten post von x22 ...
> bis auf die bemerkung : das was du bringst sind lediglich totschalgargumente
> wie ich dir bereits sagte : wenn DU dir C conventions angewöhnt hast ... dann verwende diese auch bitte ausschließlich bei C ...
> in java gibt es allerdings andere conventions ... und an die sollte man sich schon halten wenn es um eine java-spezifische frage geht ...
> ...




na dann verweis mich mal auf andere Threads.
Und ich habe nicht gesagt, dass ich es nicht einsehe. Nur die Art, wie das hier versucht wird zu vermitteln ist sozialpädagogisch so ziemlich auf nem schlechten Niveau.. weiß nicht ob allgemein ein schlechter Umgang im Umfeld ist, oder warum man in einem Forum so aggressiv wird?
Das kannst aber nur du mir beantworten.


----------



## pg1337 (7. Mrz 2012)

Da hat er Recht!


----------



## jgh (7. Mrz 2012)

x22 hat gesagt.:


> ...
> Und ich habe nicht gesagt, dass ich es nicht einsehe. Nur die Art, wie das hier versucht wird zu vermitteln ist sozialpädagogisch so ziemlich auf nem schlechten Niveau.. ...



Du hast natürlich aber auch nicht gesagt, dass du mit deiner Meinung falsch lagst. Und das hätte natürlich dieser Diskussion den "Sprengstoff" entzogen.

Mit deinen Ansichten über die "Aggresivität" einiger User dieses Forums laufe ich aber konform mit dir. Deinen Beitrag als "grenzwertig" zu bezeichnen, finde ich pers. unangemessen, gerade wenn man sich die anderen Beiträge ansieht^^
...aber nachdem mir mal ein Mod in einem Post über Exceptions (für und wider, checked-Exp. etc) mein Argument, das die Core-Klassen von Java dieses Prinzip auch nutzen, mit dem folgenden Satz außer Kraft gesetzt hat 





SlaterB hat gesagt.:


> ..." wenn Sch.. so schlecht schmeckt, warum fressen so viele Fliegen sie täglich?"


lächele ich nur noch darüber 

Wenn der Wind des Wandels weht, bauen einige Mauern, andere bauen Windmühlen...einfach mal so in den Raum geworfen


----------



## x22 (7. Mrz 2012)

Kommt man ja nicht dazu, weil man sich vor 10 Leuten rechtfertigen muss, von denen 7 oder 8 einfach nur die Argumente von dem Vorherigen übernehmen, warum auch immer.

Wie gesagt, man sollte sich immer fragen, auch wenn das hier nur das "Internet" ist:

Würdest du so mit deinem Chef reden?

Der Sprengstoff sollte nun "entzogen" sein 
und @Gossi: Wieso sollte ich in ein C-Forum gehen, weil ich EINE Konvention falsch übernommen habe?
Völlig absurder Vorschlag und schon ziemlich respektlos. Wenn dir meine "Arroganz", welche ich nicht erkennen kann(du aber einer von denen bist, die einfach nur Argumente von anderen übernehmen), so stört, halte dich doch einfach aus dem Thema hier raus..?



```
System.exit(0);
```

für dich würde ich sagen.


----------



## pg1337 (7. Mrz 2012)

grenzt ja schon fast hier an "Gruppenzwang".
80% bringen garkeine eigenen Argumente mehr, sondern schreiben nur nochmal einen ewig langen Text, der aber nichts neues aussagt, das interessiert doch keinen?!lol


----------



## Gossi (7. Mrz 2012)

x22 hat gesagt.:


> *Wie gesagt, seit 7 Jahren wird in unsrer Firma so programmiert, bei der deutschen Bank hab ich auch schon mitgeholfen und anderen großen Projekten*.
> 
> *Weiß nicht wieviel Erfahrung du hast aber scheinst mir eher ein etwas jüngerer, oft in seinen posts ziemlich aggressiver Mensch zu sein.*
> 
> ...





x22 hat gesagt.:


> ...Wenn dir meine "Arroganz", welche ich nicht erkennen kann...



Stimmt, ich finde hier auch keine Arroganz scnr

Es ist doch nunmal so, am Anfang wurde dir mehrfach (sogar mit Links zu Dokus etc.) mitgeteilt, dass der Stil sehr wohl gut war und nicht wie von dir geschrieben schlecht. Darauf hast du mit den im ersten Zitat gekennzeichneten Sprüchen reagiert und, mir egal ob du es so siehst, damit stellst du dich hier über ALLE die vorher etwas geschrieben haben und das auf eine ziemlich herablassende oder halt arrogante Art und Weise. Das dann die Leute schreiben, dass die Erfahrung dann wohl nicht die beste sei, ist verständlich, dass du dich dann aufregst und persöhnlich wirst, war halt dein Fehler, die restlichen Fehler, liegen halt (mich nicht ausgenommen), an der Community und (ohne euch kritisieren zu wollen, eigentlich macht ihr eure Arbeit gut), an den Mods, die dieses Thema schon viel früher hätten schließen können/sollen/müssen.

Also Vote 4 Close...

[EDIT]Oder halt bis Post #12 drinne lassen, rest in die Plauderecke verschieben, wenn schon nicht geschlossen wird...[/EDIT]


----------



## SlaterB (7. Mrz 2012)

hier wird doch gut und ernsthaft diskutiert, zu schließen ist da nichts, abzuspalten in anderes Thema sicherlich,
wenn jemand die Zeit erübrigt (edit: inzwischen geschehen)

(edit: inzwischen sehe ich auch die Anteile 'wer hat wann welche Arbeit gemacht, geh doch wo der C-Code wohnt' usw, naja)


----------



## SlaterB (7. Mrz 2012)

um auch was anzumerken, damit ich z.B. für jgh nicht nur als Sch.. in Erinnerung bleibe  
(Achtung, zweite Erwähnung in 26.000 Postings... )

bisher wurde, soweit ich das sehe, kein richtiges Argument für die Deklaration der Schleifenvariable vor der Schleife angebracht, richtig?
Berufsschule, lange so gemacht usw. sind dürftige Punkte, besonders wenn gegen 90% der Internet-Quellen, also gegen den Standard 

hier noch ein echtes Argument für den allgemein bekannten möglichst geringen Scope von Variablen

```
public class Test {
    public static void main(String[] args)  {
        int i = 0;
        int j = 0;
        int x = 0;
        for (i = 0; i < 20; i++)  {
            x += i;
            for (j = 0; j < 20; j++)  {
                x += j;
                x += i;  // unerkannte falsche Variable, 
                          // auch durch andere Deklaration freilich nicht gelöst, da verschachtelt
                          // (ganz abgesehen davon dass das manchmal gewünschter richtiger Code ist)
            }
        }

        for (j = 0; j < 20; j++)  {
            x += i; // unerkannte falsche Variable, 
                      // würde anderenfalls auffallen, da i dann hier nicht sichtbar wäre
        }
    }

}
```

von Varianten wie

```
for (j = 0; j < 20; i++)  {
```
ganz zu schweigen


----------



## x22 (7. Mrz 2012)

SlaterB hat gesagt.:


> hier wird doch gut und ernsthaft diskutiert, zu schließen ist da nichts, abzuspalten in anderes Thema sicherlich,
> wenn jemand die Zeit erübrigt (edit: inzwischen geschehen)




dann warst du wohl derjenige, der seine Zeit für aufopfern musste :/. 


zum Topic:

In meinem Java Handbuch, wo ich grade nachgeschaut habe, wird der Counter auch zuerst vor der Schleife deklariert, im nächsten Beispiel in der Schleife.
So ganz hat sich die Konvention ja nicht wirklich durchgesetzt.
Buch ist vom Addison-Wesley Verlag, denke da kann man sich drauf verlassen.

Wenn man es dort drin liest, es evtl. hier jedoch nach eurer Sichtweise "falscher Konvention" ist, kann man doch hoffen, dass es richtig ist.
Und lernfähig sollte der Mensch immer sein, Leute die mir aber zu aggressive Sachen hier schreiben ignoriere ich.


----------



## AngryDeveloper (7. Mrz 2012)

Solange du nicht mit der Zählervariable *nach* der Schleife weiterarbeiten möchtest, macht es eigentlich wenig bzw. gar keinen wirklichen Sinn die Zählervariable davor zu deklarieren.

Das Java Handbuch von Guido Krüger?
In dem Buch steht auch, dass Java Objekte als "call by reference" übergibt... (zumindest in einer ältere Version. Weiß nicht wie das bei neueren Auflagen aussieht)
Man kann sich da also nicht unbedingt drauf verlassen, da sich bei großen Büchern auch gerne mal Fehler einschleichen können.

Wenn es in der Firma so als Konvention existiert, hält man sich eben daran. Bei Konventionen innerhalb einer Firma/Teams gibt es immer mal Kompromisse die man eingehen sollte/muss.
Für Anfänger in Java und die allgemein verbreiterte Form ist bei der Zählervariable aber im for-Header.


----------



## x22 (7. Mrz 2012)

Kann ich wie gesagt nicht wissen, wenn ich ältere Fachbücher habe, es in meiner Firma so angewandt wird, in der Berufsschule früher, bei meinem Masterstudiengang mein Prof. das so gesagt hat etc.

Habe ja eingeräumt, dass es dann wohl nicht überall der Fall ist.
Trotzdem verärgern manche Beiträge von Leuten hier einen ziemlich, da wenn man davon ausgeht, dass ich mein Wissen nur weiter geben wollte, sie ziemlich aggressiv, ohne Manieren hier agieren.


----------



## SlaterB (7. Mrz 2012)

> Solange du nicht mit der Zählervariable nach der Schleife weiterarbeiten möchtest

und der andere Fall, mit der Zählervariable nach der Schleife weiterarbeiten, ist genauso sinnlos, 
das kann man doch nicht ehrlich vorschlagen, so unübersichtlichen Code?,
soll man aus der Schleife errechnen was am Ende rauskommt? 
falls es einen festen max-Wert gibt, kann man den ja verwenden, evtl. breaks, Exception sind noch grausiger

die Zählvariable einer for-Schleife wird danach doch nie gebraucht, also muss sich auch nie danach sichtbar sein,

wenn man doch die Zählvariable einer Schleife bracht, dann besser deutlich machen, etwa durch eine while-Schleife:

```
int k = 0;
while (xy) {
   k++;
}
System.out.println("Abbruch war bei k: "+k);
```

ok, gleich ein Beispiel,
allein schon die Information, welchen Wert die Zählvariablen letztlich hatte, gerade bei möglichen vorzeitigen Abbruch,
kann man strenggenommen auch bei for-Schleifen irgendwann mal benötigen, falls aus irgendeinem Grund for zu bevorzugen ist,
aber das wäre die seltene Ausnahmen, nicht der Standard


----------



## x22 (7. Mrz 2012)

Das ist sowieso die Frage.. da man sogut wie immer anstatt einer for- eine while-Schleife nehmen kann..


----------



## AngryDeveloper (7. Mrz 2012)

SlaterB hat gesagt.:


> und der andere Fall, mit der Zählervariable nach der Schleife weiterarbeiten, ist genauso sinnlos,
> das kann man doch nicht ehrlich vorschlagen, so unübersichtlichen Code?,
> soll man aus der Schleife errechnen was am Ende rauskommt?


Finde es auch sinnlos, wäre aber der einzige Fall warum man sowas machen würde. Auch wenn es keinen sinnvollen Anwendungsfall gibt (oder ich einfach keinen kenne?). :bahnhof:



SlaterB hat gesagt.:


> die Zählvariable einer for-Schleife wird danach doch nie gebraucht, also muss sich auch nie danach sichtbar sein,


Sehe ich ja ebenfalls so.



SlaterB hat gesagt.:


> aber das wäre die seltene Ausnahmen, nicht der Standard


Richtig.


Ich glaube, dass wir das jetzt genug durchdiskutiert haben.
Zumindest hab ich durch einen Link von irgendwem hier mal gelernt, warum das mal in C gemacht wurde. :joke:


----------



## Final_Striker (7. Mrz 2012)

x22 hat gesagt.:


> Das ist sowieso die Frage.. da man sogut wie immer anstatt einer for- eine while-Schleife nehmen kann..



Ich finde die for-Schleifen übersichtlicher und "sauberer" als while-Schleifen. Ich denke, dass liegt mitunter daran, dass ich bei ihnen vorher keine Zählvariablen deklarieren muss. While-Schleifen nutze ich nur in den Fällen, wo die Anzahl der Schleifendurchläufe beim Start der Schleife noch nicht bekannt ist.


----------



## SlaterB (7. Mrz 2012)

x22 hat gesagt.:


> Kann ich wie gesagt nicht wissen, wenn ich ältere Fachbücher habe, [..]
> 
> [..] sie ziemlich aggressiv, ohne Manieren hier agieren.



ohne Not mit


> vergiss das lieber schnell wieder, kein guter Programmierstil!


am Anfang reinzupoltern ist dann aber auch selber fraglich manierlich,

nach so einen 'Angriff' zu einem ziemlich klaren Thema muss man sich dann nicht über starke Gegenwehr wundern,
was nicht alles auf Gegenseite entschuldigen soll


----------



## Gossi (7. Mrz 2012)

Wobei man bei while-Schleifen wieder eine Variable mit erweiterten Scope hat.

Sinn macht (in meinen Augen) folgender Programmcode:


```
int i = 0;
for(i; i < collection.size(); i++) {
	//do something
}
```

Nur, wenn man sowas in der Art möchte:


```
int i = 0;
for(i; i < collection.size(); i++) {
	if(collection.get(i).equals("Gesuchtes Objekt"); {
		break;
	}
}
System.out.println("Das Objekt befand sich an Stelle: " + i);
```


----------



## AngryDeveloper (7. Mrz 2012)

Gossi hat gesagt.:


> ```
> int i = 0;
> for(i; i < collection.size(); i++) {
> if(collection.get(i).equals("Gesuchtes Objekt"); {
> ...


Und selbst da kann man dann wieder sagen: Bitte keine Nebeneffekte.
-> Auslagern in Methode und direkt in der Schleife mit return i für den gefundenen Index rausspringen.  :rtfm:
(oder schon vorhandene Methoden nutzen: indexOf)

[OT]Gibt kein Klugs******smiley oder?[/OT]


----------



## Gossi (7. Mrz 2012)

Jetzt geht die Penunzens*****erei wieder los


----------



## x22 (7. Mrz 2012)

SlaterB hat gesagt.:


> ohne Not mit
> 
> am Anfang reinzupoltern ist dann aber auch selber fraglich manierlich,
> 
> ...




Das wusste ich garnichtmehr, dass ich das so geschrieben habe, aber ja das ist evtl. etwas provokokant.
Wenn es wen verletzt hat, sorry for that, war da etwas im Stress und hatte nicht mehr Zeit als einen Satz zu schreiben.


----------



## triopsfreak (7. Mrz 2012)

Ich weiss zwar, dass die Standart-Bibliotheken nicht immer perfekt sind, aber in allen die ich jetzt mal angeschaut habe wird es mit 
	
	
	
	





```
for (int i = 0;...
```
 gemacht, in String ist es so und in Collections auch...


----------



## gassssssst (7. Mrz 2012)

pg1337 hat gesagt.:


> grenzt ja schon fast hier an "Gruppenzwang".
> 80% bringen garkeine eigenen Argumente mehr, sondern schreiben nur nochmal einen ewig langen Text, der aber nichts neues aussagt, das interessiert doch keinen?!lol


Die Aussage ist gerade von dir mehr als absurd, da du anscheinend der einzige hier bist, der zwei Accounts brauchst um deine Meinung rüberzubringen? (Ich bin mir sicher ein Mod bestätigt dem Rest gerne, dass "eure" Beiträge öfters die gleiche IP haben...)

Ansonsten weiß ich gar nicht warum du hier noch weiter darüber diskutierst. Der Scope von Variablen ist so klein wie möglich zu halten. Gerade bei Zählervariablen. Das ist nunmal ein von allen anerkannten Grundsatz von gutem Code. Hat auch nichts mit der Programmiersprache zu tun (IIRC konnte man sogar "schon" in C99 die deklaration in die for schleife schreiben).
Falls du unbedingt Literatur brauchst um die Meinung bestätigt zu bekommen wird einen Blick in Clean Code oder Effective Java. Oder schau dir einfach Open Source Code an. Wenn du es irgendwo anders gelesen hast gib uns bitte die Namen der Bücher, so dass wir sie im Bücherforum auf die Liste nicht nicht empfehlenswerten Bücher setzen können.


----------



## xehpuk (8. Mrz 2012)

Hier habe ich diese Methode vorgeschlagen, um die Häufigkeit eines Strings in einem anderen auszugeben:

```
static int count(final String a, final String b) {
    final int l = b.length();
    if (l == 0)
        return a.length() + 1;
    int n = 0;
    for (int i = 0; (i = a.indexOf(b, i)) != -1; i += l, n++);
    return n;
}
```
Die eigentliche Laufvariable war hier aber auch 
	
	
	
	





```
i
```
. 
	
	
	
	





```
n
```
 wurde dafür "normal" inkrementiert, wie es also für eine Zählvariable üblich ist.
Finde das selbst aber auch grenzwertig. Da passiert vielleicht schon zu viel "Magie".


----------



## hemeroc (8. Mrz 2012)

Nur damit ich aus Langeweile auch mal meinen Senf dazu gegeben hab und der Vollständigkeit halber:

Wieso früher so war oder manchmal so ist, dass der Scope künstlich erhöht wurde:
- Einige ältere Compiler hatten manchmal Probleme mit Variablendeklerationen im Schleifenkopf
- Performance

Performance möchte ich hier nochmals kurz erläutern. Compiler versuchen zwar zu optimieren aber nicht jede Optimierung kann von jedem Compiler gleich gut durchgeführt werden und manchmal macht es durchaus sinn gewisse dinge zu machen hier ein kurzes Beispiel absichtlich nicht in java-Code, da es hier kaum relevant ist:


```
schleife(bedingung) {
   for(int i = 0; i < 10; i++) {
      // do something
   }
}

int i;
schleife(bedingung) {
   for(i = 0; i < 10; i++) {
      // do something
   }
}
```

Die zweite Schleife ist unter gewissen Umständen schneller da i nicht jedes mal erneut deklariert werden muss und somit Zeit eingespart werden kann (in Java ist das aber relativ irrelevant). Die meisten modernen Compiler würden diese Optimierung aber auch selbst machen nur kann man sich darauf eben nicht verlassen.

Und nur der Vollständigkeit halber man kann in Java wenn man den Scope außerhalb der Schleife braucht in auch noch verringern nur wissen das nicht sehr viele Leute daher poste ichs einfach mal:


```
public static void test() {
    // do something
    {
        int i;
        for(i =0; i < 10; i++) {
            // do something, maybe break
        }
        System.out.println(i);
    }
    // i ist hier nicht mehr sichtbar!
}
```

Wäre dann aber auch ein möglicher Kandidat für das Refactory-Pattern "Method extraction".

Liebe Grüße
Hemeroc


----------



## pg1337 (8. Mrz 2012)

Das liegt dann wohl daran, dass ich als Azubi in der Selben Firma eingestiegen bin


----------



## x22 (8. Mrz 2012)

hemeroc hat gesagt.:


> ```
> public static void test() {
> // do something
> {
> ...



Das ist ein gutes Beispiel.. nur werde ich in Zukunft die Methode mit der Deklaration & Initialisierung im Methodenkopf berücksichtigen, bzw. versuchen einzusetzen was sich schwerer gestalten könnte, als erhofft


----------



## ARadauer (8. Mrz 2012)

pg1337 hat gesagt.:


> Warum wollen die das in der Berufsschule dann so und geben sogar punkt-Abzug?


Weil sie keine Ahnung haben.

Ganz einfach... warum unterichte ich in Berufsschule wenn ich als guter Programmierer in der Wirtschaft viel mehr verdienen kann? 
A) Weil ich mein Wissen an die Jugend weitergeben möchte
B) Weil ich eigentlich schlecht bin und mein Wissen aus 20 Jahre alten Fachbüchern habe


----------



## Sonecc (8. Mrz 2012)

ARadauer hat gesagt.:


> Weil sie keine Ahnung haben.
> 
> Ganz einfach... warum unterichte ich in Berufsschule wenn ich als guter Programmierer in der Wirtschaft viel mehr verdienen kann?
> A) Weil ich mein Wissen an die Jugend weitergeben möchte
> B) Weil ich eigentlich schlecht bin und mein Wissen aus 20 Jahre alten Fachbüchern habe



Vielleicht etwas übertrieben.
Ich hatte einen Lehrer, der alles richtig gemacht hat und mich bis heute geprägt hat. Der wäre in der Wirtschaft sicher auch gut aufgehoben, er wollte aber lieber sein Wissen weitergeben als dass er für Wirtschaftsfuzzis rumfrickeln muss.


Viel eher trifft denke ich zu, dass Lehrer häufig ein Problem damit haben auf aktuellem Stand zu bleiben.
Ich hatte in meinem Abi einen Lehrer, der um die 50 war. Er hatte das Programmieren gelernt, als es grade aufkam und war dementsprechend antiquiert in seinen Ansichten.
Er hat leider nie den Drang dazu verspürt sich neue Techniken oder Sprachen anzueignen. Stattdessen blieb er in seiner Schiene. Wir mussten damals VBasic lernen, weil er die Wahl hatte zwischen VB, Java und c++.
Sein Argument dazu: VB kenn ich schon.


Lehrer haben ne Menge zu tun und daher selten Zeit sich weiterzuentwickeln.
Als Mitarbeiter in der Wirtschaft oder der Industrie sollte man aber immer versuchen sich weiterzuentwickeln. Der erste Schritt ist dabei über die Schule hinauszuwachsen und eigene Regeln oder Programmierweisen zu entwickeln. Dazu zählt auch das erlenen von allgemein gültigen Konventionen. Wenn man nun das Pech hat in einer Firma zu landen, in der diese Konventionen verletzt werden, dann ist das Pech. In der Firma hält man sich dann halt daran. Dadurch dass man sich aber informiert hat und sich damit weiterentwickelt hat, weiß man wie es besser geht und kann dies zumindest Privat umsetzen.

Sollte dann mal ein Jobwechsel anstehen ist es auch leichter sich in den neuen Job einzufinden, denn wenn diese neue Firma sich an die Konventionen hält muss man sich nicht langwierig umgewöhnen. Man weiß ja schließlich wie es richtig geht.

In diesem Sinne:
@x22 und pg1337:
Versucht nicht auf dem aktuellen Stand stehen zu bleiben. Entwickelt euch weiter. Besorgt euch gute, aktuelle (!) Literatur und lernt weiter. Was man hier teilweise lesen musste, war schlicht eine Verweigerung davor etwas zu lernen, bis zu dem Punkt, an dem wirklich keine Argumente mehr gefunden werden konnten. So sollte es besser nicht sein. Alle die euch hier mitteilen wollten, wie es richtig geht haben schon einiges an Erfahrung und bei einigen kann man tatsächlich davon ausgehen, dass deren Erfahrung die eure um weites übersteigt. Also bitte auch nicht patzig reagieren und den dicken Mann raushängen lassen, sondern entsprechend auf Argumente eingehen. Kaum einer wollte euch persönlich attackieren, sondern einfach nur helfen einen Fehler in der Denkweise oder im gelernten aufzudecken und zu beheben.


----------



## Gast2 (8. Mrz 2012)

ARadauer hat gesagt.:


> Weil sie keine Ahnung haben.



Würde ich unterschreiben. Mein Neffe hat in der Berufsschule das erweitern von Brüchen vom Lehrer falsch erklärt bekommen ... noch fragen?! 

Und wenn Profs immer Recht hätten... lassen wir das lieber


----------



## faetzminator (8. Mrz 2012)

ARadauer hat gesagt.:


> Ganz einfach... warum unterichte ich in Berufsschule wenn ich als guter Programmierer in der Wirtschaft viel mehr verdienen kann?
> A) Weil ich mein Wissen an die Jugend weitergeben möchte
> B) Weil ich eigentlich schlecht bin und mein Wissen aus 20 Jahre alten Fachbüchern habe



Kann ich nur bestätigen. Hatte in der Berufsschule 2 A-Lehrer (super Kenntnisse) und zig B-Lehrer. Ich erinner mich an den C-Lehrer (Sprache C) im ersten Jahr: "Was, Sie machen in einem Schleifenkopf eine Zuweisung? Kompiliert das überhaupt?" - dazu muss man sagen, dass wir Prüfungsprogramme auf Papier abgeben mussten.


----------



## ARadauer (8. Mrz 2012)

Wobei ich natürlich zu meiner sehr ploarisierenden Aussage dazu sagen muss, dass es sicher Ausnahmen gibt!

aber für ein for(int i = 0.. einen Punkt ab zu ziehen ist einfach nur blödsinn....


----------



## Sonecc (8. Mrz 2012)

Ja, das mag stimmen in heutigen Verhältnissen.
Liegt nunmal an dem von mir angesprochenen Problem, dass Lehrer oft nicht die Zeit oder Lust haben sich weiterzuentwickeln.



Edit:

Was wäre denn mit einer Schleife wie dieser hier:


```
public void output(Object[] array) {
     for (Object o : array) {
           System.out.println(String.valueOf(o));
     }
}
```

Meines wissens nach ist es bei dieser Schleife gar nicht möglich die Deklaration der Variable o außerhalb der Schleife vorzunehmen.


----------



## x22 (8. Mrz 2012)

@Sonecc: Was hat das mit Weiterbilden zu tun? Wenn es einem jahrelang so erklärt wurde, kann man es wohl kaum wissen?
Abgesehen davon verweigere ich nichts, habe doch gesagt dass ich es anerkenne. Wo liegt dein Problem noch jetzt?
Habe schon sehr viel Literatur gelesen, nur wie gesagt wenn es sich auch um Ältere handelt wo es noch anders drin steht ist das wohl ein Problem.

Edit: Persönlich angehen und sehr unfreundliche Antworten sind zweierlei.


----------



## Sonecc (8. Mrz 2012)

x22 hat gesagt.:


> @Sonecc: Was hat das mit Weiterbilden zu tun? Wenn es einem jahrelang so erklärt wurde, kann man es wohl kaum wissen?



Deswegen der Hinweis darauf, dass man sich weiterbilden kann.
Wenn du aus der Schule kommst, kannst du nicht einfach in die Welt laufen und sagen: "Ja, toll, ich weiß nun alles". Du musst weiter lernen. Vor allem als Programmierer. Das nennt man unter anderem Weiterbildung. Essentiel für jeden halbwegs guten Programmierer wie ich finde. Hättest du dich weitergebildet, wärest du nicht selten auf die in Java sinnvolle und richtige Variante gestoßen und hättest dadurch lernen müssen, dass das von dir gelernte so nicht korrekt ist, bzw. nicht mehr gilt.
Das ist scheinbar nicht geschehen und darauf wollte ich dich, aber eben auch andere die das hier lesen hinweisen.





> Abgesehen davon verweigere ich nichts, habe doch gesagt dass ich es anerkenne. Wo liegt dein Problem noch jetzt?


Es ist sehr zurvorkommend, wenn man dein Beitrag des anderen ganz liest. Dann wäre dir folgender Halbsatz nicht entgangen:


> (...)bis zu dem Punkt, an dem wirklich keine Argumente mehr gefunden werden konnten



Und genau das war der Fall. Du hast solange behauptet, dass du im Recht wärest, bis praktisch jeder dagegen sprach und dir keine Argumente mehr blieben. Stattdessen hätte man sich informieren können (Google z.b.) und alleine dadurch schon erkennen können, dass die eigene Aussage vl falsch ist. Dass du inzwischen die argumente angenommen hast, habe ich also nicht bestritten. Ich kritisiere nur den Umgang mit der Kritik die geäußert wurde.



> Habe schon sehr viel Literatur gelesen, nur wie gesagt wenn es sich auch um Ältere handelt wo es noch anders drin steht ist das wohl ein Problem.


Und das ist, was ich bemängelt habe. Alte Literatur bringt niemanden etwas. Die Informatik entwickelt sich jährlich weiter und wird immer komplexer. Systeme verändern sich und auch Konventionen oder eben Probleme innerhalb von Systemen. Um auf dem aktuellen Stand zu bleiben (wie schon erwähnt etwas essentielles als Programmierer) kannst du dich nicht darauf verlassen, dass Dinge die vor 5 Jahren noch Bestand hatten heutzutage genauso gültig sind. Das machen Lehrer schon zu genüge und was das für auswirkungen hat, hast du ja nun selbst feststellen können.


----------



## thE_29 (8. Mrz 2012)

So, dann schreib ich auch mal bißchen was (und wenn jemand gemein wird, dann setzt was )

Dass das ganze in C oftmals anders geschrieben wird, hat einen logischen Grund!

C wurde nach und nach größer und mächtiger..

Ältere gcc Versionen lassen einen C-Source NICHT kompilieren, wenn man mitten im Source Variablen deklariert. Bei den Anfangszeiten musste man diese immer bei Scope-Anfängen machen (also wenn eine { aufgeht).

Des weiteren, warum schreiben manche die for-schleife "anders".

Also so hier:

```
{
  int i = 0;
  for(i = 0; i < 99; i++)
  { }
  i = 42;  //funktioniert immer, weil Variable ja vorher deklariert wurde
}
```

Das kommt auch wieder von C/C++, weil (das ist ja das komische) gewisse C-Compiler die Variable nicht nur im "Scope" gelassen haben, sondern die war allg. gültig.
Beispiel:

```
{
  for(int i = 0; i < 99; i++)
  { }
  i = 42; //Fehler in Java - funktioniert aber mit gewissen C/C++ Compilern
}
```


Dieser Codeabschnitt liefert in Java einen Fehler, weil i nur im Scope=For-schleife gültig ist. Aber für gewisse C/C++ Compiler (Borland, VC) ist das i auch außerhalb der Scope da und benutzbar.
Man hat also zur besseren Lesbarkeit, die Variable VOR der for-schleife deklariert, damit man nicht auch noch die for-schleife nach NEUEN Variablen absuchen musste...

In Java hat das aber IMHO nichts mit Code-Conventions zum tun. Braucht man die Variable auch außerhalb der Schleife, so deklariert man diese davor. Wenn nicht, dann halt in der for-schleife..

BTW: Die Logik, dass eine { immer in der gleichen Zeile ist, finde ich zum Kotzen und nutze ich NIE.. Ich finde den Code dadurch nicht lesbarer.. (im Gegenteil sogar).


----------



## SlaterB (8. Mrz 2012)

> BTW: Die Logik, dass eine { immer in der gleichen Zeile ist, finde ich zum Kotzen und nutze ich NIE.. 
> Ich finde den Code dadurch nicht lesbarer.. (im Gegenteil sogar). 

auch dafür ist hier sicher Platz:
aber wenn man richtig formatiert, wovon ja auszugehen ist, dann wird eine sicher vorhandene innere Code-Zeile doch eingerückt,
sowohl bei Klassen, bei Methoden als auch Blöcke,

reicht das nicht völlig zur Kenntnisnahme?
mir bringen die {-Zeilen gar nichts, außer alles auseinanderzurücken, weniger Code auf einer Seite

das } auch als eigene Zeile einzusparen, rechts an die letzte Code-Zeile zu pappen,
wäre allerdings auch mir zuviel,
das for + } zusammen oder das public + } zusammen ergeben dagegen zusätzlich zur Einrückung 
nochmal den optisch abgeschlossenen Rahmen zu einem Block/ Methode/ Klasse


Kopie von weiter oben

```
public void output(Object[] array) {
     for (Object o : array) {
           System.out.println(String.valueOf(o));
     }
}
```


----------



## Ebenius (8. Mrz 2012)

Sehe ich genau so wie SlaterB. So hat's auch Sun in den Coding Guide Lines…

Ebenius


----------



## thE_29 (8. Mrz 2012)

Oho.. Ne richtige Mod-Versammlung in dem Thread hier 

Dadurch, dass ich auf 2x24" Monitoren arbeite und daheim auch 24" + 13" MBP stehen habe, habe ich genug Platz und deswegen kommt die { immer in eine eigene Zeile  (außer, der Befehl drinnen ist nur eine Zeile).
Genauso mache ich das beim try { auch so..

Wird halt von C/C++ sein (da gabs kein try) und dort habe ich es auch immer so gemacht, weil auch ich habe C/C++ gelernt und bin dann zu Java 

Und in der ersten Firma (nur ein 19") hatte ich die Einrückungen sogar auf 2 (statt 4) gestellt, weil mir das Scrollen nur noch auf die Nerven ging..
Aber heutzutage habe ich das auch auf 4, weil ja genug Platz da ist


----------



## SlaterB (8. Mrz 2012)

gerade Breitbildmonitore unterstützen eigentlich Einrückung, Platz in der Breite ist genug,
während die Zeilenanzahl eher sinkt, falls man die Schriftgröße erhöht, jedenfalls die kurze/ begrenzte Seite des Monitors ist 

falls man nicht mehrere Fenster nebeneinander setzt


----------

