Computerhilfen.de
Design und Entwicklung => Programmieren Forum & Hilfe => Thema gestartet von: Scarred Soul am 16.06.09, 21:48:21
-
hallo,
ich möchte einem array werte mit hilfe einer schleife zuweisen (über tastatur). das problem ist, dass bei eingabe einer '0' das programm beendet werden soll.
ich habe schon eine lösung, doch ich denke, dass es eine elegantere lösung dafür gibt.
int[] reihe = new int[laenge];
for (int i = 0; i < reihe.length; i++ ) {
reihe[i] = 1;
}
for (int i = 1; (i < reihe.length) && (reihe[i - 1] != 0); i++ ) {
reihe[i] = Konsole.getInputInt("Geben Sie eine Zahl ein (0 zum Beenden): ");
}
die erste schleife dient nur dazu, dem array werte, die verschieden sind von null, zuzuweisen, so dass die zweite schliefe überhaupt ausgeführt wird.
falls jmd eine bessere und elegantere lösung hat - immer her damit :)
-
Da kann man ja nicht zuschauen.
Probier mal das:
int[] reihe = new int[laenge];
java.lang.util.Arrays.fill(reihe, 1);
for (int i = 1; i < reihe.length; i++ ) {
if ((reihe = Konsole.getInputInt("Geben Sie eine Zahl ein (0 zum Beenden): ")) == 0) {
break;
}
}
-
Da kann man ja nicht zuschauen.
Probier mal das:
int[] reihe = new int[laenge];
java.lang.util.Arrays.fill(reihe, 1);
for (int i = 1; i < reihe.length; i++ ) {
if ((reihe = Konsole.getInputInt("Geben Sie eine Zahl ein (0 zum Beenden): ")) == 0) {
break;
}
}
danke, funktioniert. ich habe jedoch meine 2. schleife so gelassen, da 'break' oft nicht gern gesehn wird.
auf jeden fall danke :)
wobei ich gerade bemerkt habe, dass durch die initialisierung von i mit 1, die komponente bei index 0 nicht mit einem eingabewert belegt wird.
bei deiner variante würde es mit i=0 gehen - dabei "stört" mich aber das 'break'^^
-
Bei so einer einfachen Konstruktion ist break kein Problem. Gibt es immerhin nicht umsonst in den meisten Sprachen. Wenn man viele verschachtelte Schleifen hat und dann viele breaks und continues drin - dann kann es etwas unübersichtlich werden. Ansonsten sehe ich keinen Grund, break nicht zu verwenden. Für solche Sachen wie in deinem Beispiel gibts das ja erst.
-
Zur Abwechslung mal absolute Zustimmung an Lisaa,
du könntest das ganze natürlich auch entsprechend invertiert und mit && in die bedingung der for-schleife packen, aber sind wir ehrlich, dann sieht das schrecklich aus und ist beschissen zu lesen (4 fach geklammert, zuweisung, prüfung, invertierung, verknüpfund in einem... brrrrr, das klingt wie wenn ichs eilig hab.)
Abgesehn davon warum sollte break nicht gern gesehn sein? Es gibt Dinge die sich einfach nicht "schön" anders ausdrücken lassen.
-
Man könnte in diesem Fall das break ja auch durch
i = reihe.length;
ersetzen. Macht das selbe, aber man erkennt u.U. nicht, wie/warum. Da ist das break dann doch richtig schön ;D
-
Man könnte in diesem Fall das break ja auch durch
i = reihe.length;
ersetzen. Macht das selbe, aber man erkennt u.U. nicht, wie/warum. Da ist das break dann doch richtig schön ;D
Das hatte ich mir auch überlegt, aber man sollte wenn's nicht nötig ist den Zähler nicht unbedingt verändern, dass man ne Regelmässigkeit drin hat und schnell durchspielen kann wie er aussieht/aussehen sollte.
Ausserdem läuft man so sehr schnell in die Gefahr bei längeren for-Schleifen zu übersehen, dass man i neu setzt und hat plötzlich ne Exception weil man den Gültigkeitsbereich des Arrays verlässt.
-
Wenn du eine variante ohne 'break' haben willst, versuche es doch mal so:
String meldg = "Geben Sie eine Zahl ein (0 zum Beenden): ";
int[] reihe = new int(laenge);
int i = 0;
boolean status = true;
while((i < laenge) && status) {
String input = Konsole.getInputInt(meldg);
if(input != 0)
reihe[i] = input;
else
status = false;
i ++;
}
-
Oh, die Variable 'input' müsste vom Typ 'int' und nicht 'String' sein. Außerdem würde ich hier eher eine Liste statt einem Array verwenden. ;)