Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Gibt es in JAVA keine verschachtelten for-schleifen?
ich habe irgendwie ein Problem in einem Programm und ich finde den Fehler einfach nicht, da ich es nicht begreife.. ich würde höchstens sagen "Ja klar, dass das nicht geht!" wenn mir jemand sagt, dass Java keine verschachtelten for-Schleifen (ich persönlich kenne sie aus C++) kennt.. würde mich aber schwer wundern...
Also, es geht um ein Sortierprogramm.. dass es da bereits bekannte algorithmen gibt, die sicherlich auch schneller und besser funktionieren, brauch mir hier niemand sagen - es geht mir um's Prinzip.
An einer verallgemeinerung (wo der Benutzer zunächst die ANZAHL der Werte und dann die EINZELNEN WERTE eingbit) werde ich arbeiten, wenn ich verstehe, was im Folgenden Code falsch ist.. bzw. "falsch" kann man nicht sagen, da es keinen Compilerfehler gibt, aber wenn ich zu Hause versuche das Programm "auf einem Zettel" zu durchlaufen, bekomme ich andere Werte.
Hier erst mal der Code
Code:
public class sortieren
{
public static void main(String args[])
{
int array[] = new int[6]; // Anzahl der Werte ist einzulesen!
int feld[] = new int[6];
array[0] = 3;
array[1] = 9;
array[2] = 2;
array[3] = 7;
array[4] = 5;
array[5] = 1;
int counter = 0;
for (int i=0; i<=5; i++)
{
for(int k=0; k<=5; k++)
{
counter = 0;
if (array[i] > array[k])
{
counter = counter+1;
}
}
feld[counter] = array[i];
counter = 0;
}
}
}
(Ah, sorry ich bin wohl nicht eingeloggt.. ich dachte ich könnte den Beitrag jetzt noch editieren.. muss nun aber doppelt posten..)
Also, es ist so, dass die richtige Reihenfolge der Zahlen eigentlich 1 2 3 5 7 9 lauten sollte.. Würde man den Code so erweitern, dass er nacheinander feld[0], feld[1], ..., feld[5] ausgibt, kommt aber etwas anderes raus!
WIESO?
Hm durch Daniels Antwort bin ich irgendwie darauf gekommen, dass ich damals wo etwas falsch verstanden habe, als ich mich mit "arrays" beschäftigt habe.
Ich dachte (und so ist es in C++ in meinen Augen auch..), dass ich in einem Feld mehrere Werte speichern kann.
Und auf diese kann ich dann über die indizes in klammern zugreifen..
an den ersten wert komme ich mit array[0], an den zweiten array[1] usw.
Doch wenn ich jetzt z.b. array[0] (bzw. feld[0]) ausgeben lassen, erscheinen dort eine ganze menge zahlen, dabei hätte ich nur eine erwartet..
was läuft da schief?! Hmm..
Thx schonmal für eure schnellen Antworten,
Gruß Jan
noch ein nachtrag:
im prinzip soll das ganze so funktionieren (was im ende zwar speicheraufwändig ist und vermutlich wesentlich mehr zeit braucht als andere algorithmen, aber eben möglich sein sollte), dass der erste wert im feld genommen und geschaut wird wie viele werte es gibt, die kleiner sind. und dann wird dieser wert eben in einem zweiten array feld[] an genau die stelle gesetzt, so dass sich das ganze nach und nach sortiert!
hab ich auch nicht gemacht, hab die klammer schon immer gesetzt (jetzt gerade bei ausprobieren) aaaaber das hab ich - dumm wie ich bin - in die zweite forschleife gepackt, die ein paar mal durchläuft und somit natürlich nicht nur einen wert ausgibt.
Der zweite Fehler (und das ist auch der eigentliche Fehler, den ich jetzt behoben habe) ist ganz einfach, dass der Counter ebenfalls noch IN der zweiten forschleife resetet wurde.. so kann er hochzählen wie er will, sobald die if-schleife verlassen wird und er HÖCHSTENS um 1 erhöht wurde, wird er wieder auf 0 gesetzt..
so ists richtig
Code:
public class sortieren
{
public static void main(String args[])
{
int array[] = new int[6]; // Anzahl der Werte ist einzulesen!
int feld[] = new int[6];
array[0] = 3;
array[1] = 9;
array[2] = 2;
array[3] = 7;
array[4] = 5;
array[5] = 1;
int counter = 0;
for (int i=0; i<=5; i++)
{
for(int k=0; k<=5; k++)
{
if (array[i] > array[k])
{
counter = counter+1;
}
}
feld[counter] = array[i];
counter = 0;
}
System.out.println(feld[0]);
System.out.println(feld[1]);
System.out.println(feld[2]);
System.out.println(feld[3]);
System.out.println(feld[4]);
System.out.println(feld[5]);
}
}
werd nun aber noch an einer verallgemeinerung arbeiten
vielen lieben Dank,
Gruß Jan
Ich will hier ja nichts und niemanden zuspammen, aber vielleicht gibt's ja wen, den es interessiert..:
Hier also meine Lösung:
Code:
import java.io.*;
public class sortieren
{
public static void main(String args[]) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Gib eine Anzahl an Werten ein! ");
int anzahl = Integer.parseInt(in.readLine());
int array[] = new int[anzahl];
int feld[] = new int[anzahl];
int counter = 0;
for (int j=0; j<anzahl; j++)
{
System.out.print("Gib einen Wert ein! ");
array[j] = Integer.parseInt(in.readLine());
}
for (int i=0; i<anzahl; i++)
{
for(int k=0; k<anzahl; k++)
{
if (array[i] > array[k])
{
counter = counter+1;
}
}
feld[counter] = array[i];
counter = 0;
}
for (int l=0; l<anzahl; l++)
{
System.out.println(feld[l]);
}
}
}
Liebe Grüße, Jan
Vielen Dank an Daniel, DaKo (sofern das ein anderer Daniel ist?!) und auch an raiL (für die beruhigende Nachricht, dass for-schleifen auch weiterhin verschachtelt werden können *g*)