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.
Bin Java-Anfänger und hätte mal meine erste Frage:
Habe einen Code geschrieben, welcher zuerst ein Array mit Zufallszahlen erzeugt. Nur dies alleine hat funktioniert.
Jetzt wollte ich aber den Code noch weiter ausbauen, das er den grössten Wert ausspuckt. Dies funktioniert irgendwie nicht richtig. Bekomme da nur Müll raus..
Wo liegt das Problem?
Hier mal der Code:
Java:
public class A1_1 {
public static void main(String[] args) {
int l = Integer.parseInt(args[0]);
int[] feld = new int[l];
for (int i=0; i<l;i++)
{
// i-te Zufallszahl im Feld an Stelle i abspeichern
feld[i] =(int) Math.floor(20*Math.random())+1;
System.out.println(feld[i]);
int erg = feld[0];
for(int c=0 ; c<l ; c++) {
if(feld[c] < erg)
erg = feld[c];
}
}
}
}
Lege dir eine Variable an(außerhalb der Schleife !!!), in der du immer das aktuellste Maximum speicherst, nachdem du eine Zahl per Zufall erzeugt hast, vergleichst du einfach diese eine Zahl mit dem aktuellen Maximum, ist die Zahl größer, setzt du Maximum auf die eben gezogene...
Die zweite Schleife brauchst du also eig. gar nicht !
1. würde ich die zweite Schleife nicht innerhalb der ersten durchlaufen
2. if(feld[c] < erg) --> müsste eher > heissen.
Java:
public static void main(String[] args) {
int l = Integer.parseInt(args[0]);
int[] feld = new int[l];
for (int i = 0; i < l; i++) {
// i-te Zufallszahl im Feld an Stelle i abspeichern
feld[i] = (int) Math.floor(20 * Math.random()) + 1;
System.out.println(feld[i]);
}
int erg = feld[0];
for (int c = 0; c < l; c++) {
if (feld[c] > erg)
erg = feld[c];
}
System.out.println("größte Zahl: " + erg);
}
Es ist nicht verkehrt (damit du auch was lernst) selber mal nachzudenken.
Bei solchen "Problemen" hat es sich bewährt, auf dem Papier die Logik mal durchzugehen und den aktuellen Wert der Variablen zu notieren. Das trägt ungemein zum Verständis bei, was man denn gerade so treibt. Da kommt man dann auch auf Lösungansätze für weiter Aufgaben.
Habe folgenden Ansatz, welcher aber nur funktioniert, wenn die Werte im Array "glücklich" angeordnet wurden.
Was müsste ich da verbessern?
Möche keine zusätzlichen Funktionen wie array.sort usw. benutzen... Ist das so irgendwie möglich?
Vielen Dank für eure Hilfe!
Java:
public class A1_1 {
public static void main(String[] args) {
int l = Integer.parseInt(args[0]);
int[] feld = new int[l];
for (int i = 0; i < l; i++) {
// i-te Zufallszahl im Feld an Stelle i abspeichern
feld[i] = (int) Math.floor(20 * Math.random()) + 1;
System.out.println(feld[i]);
}
// Grösste/Kleinste Zufallszahl suchen
int max = feld[0];
int min = feld[0];
int maxx = feld[0];
int maxxx = feld[0];
for (int c = 0; c < l; c++) {
if (feld[c] > max)
max = feld[c];
if (feld[c] < min)
min = feld[c];
if (feld[c] > maxx && feld[c]< max)
maxx = feld[c];
if (feld[c] > maxxx && feld[c]< maxx)
maxxx = feld[c];
}
System.out.println("grösste Zahl: " + max);
System.out.println("zweitgrösste Zahl: " + maxx);
System.out.println("drittgrösste Zahl: " + maxxx);
System.out.println("kleinste Zahl: " + min);
}
}
Danke für die Antwort...
Aber das mach ich doch, oder seh ich da was falsch?
Sorry, bin ein absoluter Beginner..
So, am besten komme ich mal zur Aufgabenstellung:
Erstelle ein Programm mit zwei Arrays mit je 6 Elementen. Im einen Array werden Zufallswerte
gespeichert (wie in Aufgabe 1) und im zweiten Array sollen die Werte dann nach deren Grösse
sortiert abgelegt werden.
Bin ich überhaupt auf dem richtigen Weg oder geht das so nicht?
Ich würden Deinen Ansatz vergessen und einen Ansatz wählen bei dem die Grösse des Arrays egal ist
Hier mal der einfachste Sortieralgorithmus mit zwei verschachtelten Schleifen und einer Bedingung
Wikipedia#SimpleSort hat gesagt.:
Code:
Schleife über Position = 1 .. N {
Schleife über Position' = Position + 1 .. N {
Falls x[Position] > x[Position'] ... {
... dann Vertausche x[Position] und x[Position']
}
}
}
Bsp:
kommt eine 9, speicherst du diese als größte Zahl im Feld max.
kommt dann eine 12, überschreibst du die 9 im Feld max. mit der 12
9 wäre jetzt die zweitgrößte Zahl, aber du hast sie einfach überschrieben.
d.h. du musst bevor die die 9 überschreibst, diese im Feld "weiter unten speichern" also im Feld maxx speichern.