Guten Morgen Forum,
Ich habe 3 Probleme/Fragen:
1.) Wir haben mit dem Programm, bei welchem mir letzte Woche geholfen wurde, weitergearbeitet und mein Lehrer hat uns neue Zeilen gegeben, welche ich auch nicht zu 100% verstanden habe, aber darum gehts hier erstmal noch nicht. Das Problem bei dieser Programmzeile ist, dass mir 2 Fehler angezeigt werden, welche eigentlich nicht da sein dürften. Ich hänge euch erstmal das Programm an und dann die Fehler:
Und ja ich weiß die Kommentare sind zu viel, aber die sind nur für mich.
Fehlermeldungen:
Könnte das vielleicht daran liegen, dass diese ganze int Reihe einfach in der falschen Position steht?
2.) Wir sollen den kleinsten Wert, welcher ja mit dieser int Reihe, die nicht funktioniert, herrausgefunden wird, in dem Array auf Index 0 setzen und die Zahl, die ausgetauscht wird, auf die Index Position des kleinsten Wertes setzen. Da ich meinen Ansatz oben im Programm nicht testen kann wollte ich fragen, ob der richtig wäre.
3.) Mein Programm von letzter Woche sollen wir nun doch optimieren. Daher wollte ich fragen, ob noch einer Ideen dazu hat. Das Programm hänge ich an:
Die Empfehlung aus meinem ersten Thread break; zu nutzen habe ich eingefügt. Gibt es sonst noch Möglichkeiten das zu optimieren? Meine erste Idee wäre beim Thema Optimieren ja den Code zu kürzen, aber ich glaube da ist nichts mehr möglich.
Ich habe 3 Probleme/Fragen:
1.) Wir haben mit dem Programm, bei welchem mir letzte Woche geholfen wurde, weitergearbeitet und mein Lehrer hat uns neue Zeilen gegeben, welche ich auch nicht zu 100% verstanden habe, aber darum gehts hier erstmal noch nicht. Das Problem bei dieser Programmzeile ist, dass mir 2 Fehler angezeigt werden, welche eigentlich nicht da sein dürften. Ich hänge euch erstmal das Programm an und dann die Fehler:
Und ja ich weiß die Kommentare sind zu viel, aber die sind nur für mich.
Java:
class Zufallszahlen_keine_doppelt {
Zufallszahlen_keine_doppelt(){
boolean flag = false; // solange flag=false -> läuft die Überprüfung/Neugenerierung von a
boolean added = false; //solange added=false -> läuft die while Schleife
int a = 0; //Zufallszahl
int zahl[];
zahl= new int [10];
for(int i=0;i<10;i++){
added = false; //damit nach erfolgreichem Durchlauf der while Schleife diese wieder startet
while(!added){ //wir wissen nicht, wie viele Durchläufe wir zur "richtigen" Zufallszahl brauchen (darf nicht 1x im Array sein; wenn sie es ist Neugenerierung-> könnte wieder die selbe sein)
flag = false; // damit die erzeugte Zufallszahl nicht ins Array kommt
a= (int) (Math.random()*10+1); //Erzeugung Zufallszahl
for(int index=0;index<i;index++){ //wir wissen wie oft sie laufen muss -> for Schleife; Läuft durch alle bis dorthin vorhandenen Indizies des Arrays
if(zahl[index] == a){ //Überprüfung, ob Zufallszahl schon im Array ist; durchläuft alle bis dato vorhandenen Indizies
flag = true; //wenn Zufallszahl schon im Array ist wird falg auf true gesetzt -> d.h. sie kommt nicht durch die nächste if Überprüfung -> while läuft erneut ab
}//Ende if
}//Ende for index
if(!flag){ //Überprüfung, ob flag auf false steht; wenn nicht dann wird die Schleife gar nicht erst gestartet -> while läuft erneut
zahl[i] = a; // falls die Zufallszahl noch nicht im Array ist wird sie jetzt diesem Überwiesen -> da flag auf false stand -> Zufallszahl noch nicht im Array
added = true; // damit die while Schleife das erste mal beendet wird und ein neuer Durchlauf mit der neuen Zufallszahl im Array gestartet werden kann
}//Ende if
}//Ende while
}//Ende for i
for(int z=0;z<zahl.length;z++){ //For Schleife geht solange wie das Array ist
System.out.println(" "+zahl[z] + "\n"); //gibt so oft wie lang das Array ist die jeweilige Zufallszahl ab Index 0 aus
}//Ende for z
System.out.println("Der kleinste Wert liegt auf dem Index: " +b);
int min (int zahl[]) {
int element = zahl.length; //größter Wert der Möglich ist
int rueck = 0; //ist dann der Index von dem kleinsten Wert
for(int i = 0; i<zahl.length; i++){ //durchläuft alle Indizies
if(zahl[i] < element){ //Überprüft, ob ein Element kleiner ist als bis dato kleinster Wert
element = zahl[i]; //wenn er kleiner ist wird er zu neuen kleinsten Wert
rueck = i; //ist der Index des bis dato kleinsten Wertes
}//Ende if
}//Ende for
return rueck; // wird der Hauptmethode überwiesen
}//Ende min
zahl[rueck] = zahl[0]; //gibt Zahl auf Index 0 an die Stelle wo die kleinste Zahl ist
zahl[0] = element; //kleinste Zahl kommt auf den Index 0
System.out.println(""+zahl[0] + zahl[rueck]);
}//Ende Methode
public static void main (String arg[]){
new Zufallszahlen_keine_doppelt(); //Methode Zufallszahlen_keine_doppelt() wird ausgeführt
}
}//Ende class
Fehlermeldungen:
Code:
Zufallszahlen_keine_doppelt.java:59: error: ';' expected
int min (int zahl[]) {
^
Zufallszahlen_keine_doppelt.java:59: error: ';' expected
int min (int zahl[]) {
^
Könnte das vielleicht daran liegen, dass diese ganze int Reihe einfach in der falschen Position steht?
2.) Wir sollen den kleinsten Wert, welcher ja mit dieser int Reihe, die nicht funktioniert, herrausgefunden wird, in dem Array auf Index 0 setzen und die Zahl, die ausgetauscht wird, auf die Index Position des kleinsten Wertes setzen. Da ich meinen Ansatz oben im Programm nicht testen kann wollte ich fragen, ob der richtig wäre.
3.) Mein Programm von letzter Woche sollen wir nun doch optimieren. Daher wollte ich fragen, ob noch einer Ideen dazu hat. Das Programm hänge ich an:
Java:
class Zufallszahlen_keine_doppelt {
Zufallszahlen_keine_doppelt(){
boolean flag = false; // solange flag=false -> läuft die Überprüfung/Neugenerierung von a
boolean added = false; //solange added=false -> läuft die while Schleife
int a =0; //Zufallszahl
int zahl[];
zahl= new int [100000];
for(int i=0;i<100000;i++){
added = false; //damit nach erfolgreichem Durchlauf der while Schleife diese wieder startet
while(!added){ //wir wissen nicht, wie viele Durchläufe wir zur "richtigen" Zufallszahl brauchen (darf nicht 1x im Array sein; wenn sie es ist Neugenerierung-> könnte wieder die selbe sein)
flag = false; // damit die erzeugte Zufallszahl nicht ins Array kommt
a= (int) (Math.random()*100000+1); //Erzeugung Zufallszahl
for(int index=0;index<i;index++){ //wir wissen wie oft sie laufen muss -> for Schleife; Läuft durch alle bis dorthin vorhandenen Indizies des Arrays
if(zahl[index] == a){ //Überprüfung, ob Zufallszahl schon im Array ist; durchläuft alle bis dato vorhandenen Indizies
flag = true; //wenn Zufallszahl schon im Array ist wird falg auf true gesetzt -> d.h. sie kommt nicht durch die nächste if Überprüfung -> while läuft erneut ab
break;
}//Ende if
}//Ende for index
if(!flag){ //Überprüfung, ob flag auf false steht; wenn nicht dann wird die Schleife gar nicht erst gestartet -> while läuft erneut
zahl[i] = a; // falls die Zufallszahl noch nicht im Array ist wird sie jetzt diesem Überwiesen -> da flag auf false stand -> Zufallszahl noch nicht im Array
added = true; // damit die while Schleife das erste mal beendet wird und ein neuer Durchlauf mit der neuen Zufallszahl im Array gestartet werden kann
}//Ende if
}//Ende while
}//Ende for i
for(int z=0;z<zahl.length;z++){ //For Schleife geht solange wie das Array ist
System.out.println(" "+zahl[z] + "\n"); //gibt so oft wie lang das Array ist die jeweilige Zufallszahl ab Index 0 aus
}//Ende for z
}//Ende Methode
public static void main (String arg[]){
new Zufallszahlen_keine_doppelt(); //Methode Zufallszahlen_keine_doppelt() wird ausgeführt
}
}//Ende class
Die Empfehlung aus meinem ersten Thread break; zu nutzen habe ich eingefügt. Gibt es sonst noch Möglichkeiten das zu optimieren? Meine erste Idee wäre beim Thema Optimieren ja den Code zu kürzen, aber ich glaube da ist nichts mehr möglich.