Hallo liebe byte-welt user,
dies hier ist mein erster Post also bitte nicht so hart ran nehmen
Ich studiere im Moment Wirtschaftsinformatik und habe eine Programmieraufgabe bekommen bei der ich einfach nicht mehr weiter weiĂ.
Zur Aufgabe: Es soll ein Programm geschrieben werden, dass ein Array der lÀnge n anlegt und mit zufÀlligen Zahlen von -100 bis 100 belegt.
Nun soll der Inhalt des Arrays mit einer vorgegebenen Methode sortiert werden.
âBeim ersten Feldelement beginnend, werden je zwei aufeinanderfolgende Elemente i und i + 1 verglichen. Ist das Element an der Stelle i kleiner als das Element an der Stelle j, werden die Inhalte der Feldelemente i und i + 1 vertauscht.â
Mein Code vergleicht leider immer nur die Stellen i und i+1. Ich weiĂ nicht wie ich die verglichenen Zahlen nun noch sortieren soll. Meine Ăberlegung ist, dass man sich die niedrigste Zahl merkt aus allen vergleichen und dann damit weiter macht aber an dieser Stelle komme ich schon nicht weiter.
Hier mein Code (nicht erschrecken):
public class P9
{
public static void main(String[] args)
{
int n = IOTools.readInteger("Bitte geben Sie die lÀnge des Feldes an:
");
n += 1;
int [] random;
random = new int [n];
for(int i = 0; i+1 < n ;i++) //In Dieser Schleife werdem dem Array Zufallswerte zugewiesen (von 0 bis n-1)
{
random** = (-100 + (int)(Math.random() * ((100 - (-100)) + 1)));
int a = random**;
System.out.println("rnd " + a); //Gibt die fĂŒr random** zugewiesene Zahl aus
Schleife2:
while( i>0 && i<n) //Diese Schleife vergleicht jeweils die Zahlen random[i-1] und random** und gibt die kleinere aus
{
if (random[i-1] < random**)
{
System.out.println("Die Zahl " + random[i-1] + " ist niedriger");
}
else
{
System.out.println("Die Zahl " + random** + " ist niedriger");
}
break Schleife2;
}
}
}
}
Das FĂŒllen des Arrays mit Zufallszahlen und
Das Sortieren des Arrays
sollten zwei getrennte Operationen sein. Also nicht beides in eine Schleife packen (kann ja auch kaum funktionierenâŠ).
Besonders âaufgerĂ€umtâ wĂ€re es, wenn in der main sowas stehen wĂŒrde wie
int n = 10;
int min = -100;
int max = 100;
int array[] = createRandomArray(n, min, max);
System.out.println("Random: "+Arrays.toString(array));
mySortMethod(array);
System.out.println("Sorted: "+Arrays.toString(array));
und es eben die beiden Methoden âcreateRandomArrayâ und âmySortMethodâ gĂ€be.
Nebenbei: Math.random() hat den Nachteil, dass es immer zufÀllige double-Werte liefert. Mit sowas wie
private static Random random = new Random(0);
...
void foo()
{
...
int randomValue = -100 + random.nextInt(100 - (-100));
}
geht das ganze vielleicht einfacher. (Und in deiner Methode wĂŒrden dort NICHT mehr 100 und -100 stehen!)
Das Sortieren⊠vielleicht erĂŒbrigt sich die Frage, wenn du das in eine eigene Methode packst. Und ⊠âbreak mit Labelâ ist nur in den ALLERseltensten FĂ€llen angebracht. (Ich selbst habe es noch NIE verwendetâŠ)
âArrays.sort()â ist in diesem Fall als Lösungsweg wohl ausgeschlossen, da der Sortieralgorithmus vorgegeben ist.
Eine ineinander geschachtelte Schleife gestaltet sich so, dass die Ă€ussere von 0 bis Anzahl der Elemente -1 und die innere von Ă€usserer ZĂ€hler bis Anzahl der Elemente zĂ€hlt. Ist Element innerer ZĂ€hler grösser (absteigende Reihenfolge) als Element Ă€usserer ZĂ€hler werden die Elemente getauscht. FĂŒr eine aufsteigende Reihenfolge muss nur der Grösser-Operator in einen Kleiner-Operator geĂ€ndert werden.
Oh man⊠ich dachte erst der Code von Spacerat hilft mir weiter aber nach Stunden von programmieren und neu versuchen und umschreiben bin ich immer noch nicht weiter⊠Ich weiĂ einfach nicht wie ich die Methode anwenden muss. Is echt dumm wenn man als AnfĂ€nger nichtmal die âLösungâ versteht⊠Danke aufjedenfall fĂŒr die Antworten.
DANKE! Hat mir sehr sehr weiter geholfen und so Àhnlich hatte ich es auch gestern schon fast selbst geschafft. Nun sieht mein Code so aus:
Java Code:
[ol]
[li]import java.util.Arrays; [/li][li]publicclass P9 [/li][li]{ [/li][li] static void sort(int[] array) [/li][li] { [/li][li] for(int i = 0; i < array.length - 1; i++) [/li][li] { [/li][li] for(int j = i; j < array.length; j++) [/li][li] { [/li][li] if(array** > array[j]) [/li][li] { [/li][li] array** += array[j]; [/li][li] array[j] = array** - array[j]; [/li][li] array** -= array[j]; [/li][li] } [/li][li] } [/li][li] } [/li][li] } [/li][li] publicstatic void main(String[] args) [/li][li] { [/li][li] int n = IOTools.readInteger(âBitte geben Sie die lĂ€nge des Feldes an: [/li]â);
[li] int [] random = new int [n]; [/li][li] for(int a= 0; a < n ;a++) //In Dieser Schleife werdem dem Array Zufallswerte zugewiesen (von 0 bis n-1) [/li][li] { [/li][li] random[a] = (-100 + (int)(Math.random() * ((100 - (-100)) + 1))); [/li][li] System.out.println("ZufĂ€llige Zahl " + random[a]); //Gibt die fĂŒr random zugewiesene Zahl aus** [/li][li] sort(random); [/li][li] System.out.println(Arrays.toString(random)); [/li][li] } [/li][li] } [/li][li]} [/li][/ol]
Es findet aufjedenfall eine Sortierung statt aber es ist komisch, dass bei einem Feld zb der LĂ€nge 7 werden die ersten 4 Zahlen sortiert und dann werden aufeinmal zahlen wieder ĂŒberschrieben bzw das Array nicht gefĂŒllt. Ich wollte den Code nicht direkt ĂŒbernehmen auch wenn ich ihn verstanden habe, mir wĂ€re es lieber wenn ich verstehe wo bei mir im Moment der Fehler liegt.
Soweit ich das bei der fehlenden EinrĂŒckung beurteilen kann sortierst du immernoch wĂ€hrend der Array noch gefĂŒllt wird. Abgesehen vom sĂŒĂen Gift der Illusion, zu denken âGenau so hĂ€tte ich es auch gemacht!â wenn man eine Lösung fĂŒr ein Problem sieht, an dem man sich vorher noch die ZĂ€hne ausgebissen hat.