Java Problem arrays & co
-
Hi,
hab folgendes Java Programm geschrieben:[java]
import java.io.*;class arrays_test2 {
public static void main(String args[]) {
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
String line = "";
double dblvar[] = new double[2];for (int i = 0; i < 2; i++) {
try {
//System.out.printeln("Bitte geben Sie die 2 Werte an,
//und druecken Sie anschließend die Eingabetaste: ");
line = din.readLine();
try {
dblvar[i] = Double.parseDouble(line);
}
catch(NumberFormatException nfe) {
dblvar[i] = 0.0;
}
}
catch(IOException ioe) {}
}
System.out.println(arrays.double_avg(dblvar));
}
}[/code]So nun wollte ich kurz bevor der Wert eingelesen wird, (also vor)
read.line()
eine "Textausgabe" machen.
Doch dies klappt nicht...Und wenn etwas falsches eingetippt wird ( wie z.b Buchstaben) dann wirds auf 0 gesetzt, klar...
doch ich wollte ganz gerne, dass dann ein "Textausgabe" kommt: "Keine Buchstaben erlaubt sondern nur Zahlen! (oder so ähnlich).Das geht sicherlich mit einr If & else Konstruktion nur wie??? Und was soll dann übergeben oder verglichen werden?
Hmm....ich weiß einfach nicht was ich als erstes machen soll bzw. was wo an
welcher Stelle gesetzt wird?Kann mir bitte jemand helfen?
Hmmm..das waren eindeutig zu viele Informationen *grübel*
[ Dieser Beitrag wurde am 26.06.2003 um 15:49 Uhr von C++lerin editiert. ]
-
Du könntest z.B. eine boolean-Variable namens isOk haben oder so. Die setzt du vorher auf true und im catch-block auf false. Dann kannst du danach per if(isOk) weiter handeln.
Ausßerdem kannst du außen um die Eingabe eine Schleife in der Form do { } while (!isOk) machen, damit die Eingabe wiederholt wird bis eine gültige EIngabe kam.
[ Dieser Beitrag wurde am 26.06.2003 um 19:17 Uhr von TriPhoenix editiert. ]
-
[java][...]
System.out.printeln("Bitte geben Sie die 2 Werte an, "+
"und druecken Sie anschließend die Eingabetaste: ("+i+". Wert)");[/code]
Es ist schon klar, warummdas nicht geht: System.out.printeln (es sollte println oder hier besser print heißen
Sußerdem kann ein Sting nicht einfach so über meherere Zeilen gehen. Du musst ih in der oberen Zeile beenden, dann ein Plus und dann eben in der nächsten Zeile wieder einen String beginnen. (Ich war so frei und habe dazugebvaut, dass er ausgibt welchen Wert man grade eingeben soll)Wenn du im catch-Block auch System.out.println() verwendest, dann sollte es eigentlich schon klappen. Zusätzlich solltest du nach dieser Ausgabe noch ein i--; einbauen, damit der User den Wert nocheinmal eingeben kann.
-
Hmm... da gibts mehrere Ansatzmöglichkeiten...
Hier mal ein paar:import java.io.*; class arrays_test2 { public static void main(String args[]) { BufferedReader din = new BufferedReader(new InputStreamReader(System.in)); String line = ""; double dblvar[] = new double[2]; for (int i = 0; i < 2; i++) { try { System.out.println("Bitte geben Sie die 2 Werte an, "+ "und druecken Sie anschließend die Eingabetaste: ("+ i +". Wert)"); line = din.readLine(); dblvar[i] = Double.parseDouble(line); } catch(IOException ioe) { } catch(NumberFormatException nfe) { dblvar[i] = 0.0; System.out.println("Keine Buchstaben erlaubt sondern nur Zahlen!"); } } System.out.println(arrays.double_avg(dblvar)); } }
oder so wie TriPhönix es meinte:
import java.io.*; class arrays_test2 { public static void main(String args[]) { BufferedReader din = new BufferedReader(new InputStreamReader(System.in)); String line = ""; double dblvar[] = new double[2]; boolean isOk = true; for (int i = 0; i < 2; i++) { isOk = true; do{ try { System.out.println("Bitte geben Sie die 2 Werte an, "+ "und druecken Sie anschließend die Eingabetaste: ("+ i +". Wert)"); line = din.readLine(); dblvar[i] = Double.parseDouble(line); } catch(IOException ioe) { } catch(NumberFormatException nfe) { isOk = false; System.out.println("Keine Buchstaben erlaubt sondern nur Zahlen!"); } } while(!isOk); } System.out.println(arrays.double_avg(dblvar)); } }
oder wie destruct0r meinte:
import java.io.*; class arrays_test2 { public static void main(String args[]) { BufferedReader din = new BufferedReader(new InputStreamReader(System.in)); String line = ""; double dblvar[] = new double[2]; for (int i = 0; i < 2; i++) { try { System.out.println("Bitte geben Sie die 2 Werte an, "+ "und druecken Sie anschließend die Eingabetaste: ("+ i +". Wert)"); line = din.readLine(); dblvar[i] = Double.parseDouble(line); } catch(IOException ioe) { } catch(NumberFormatException nfe) { i--; System.out.println("Keine Buchstaben erlaubt sondern nur Zahlen!"); } } System.out.println(arrays.double_avg(dblvar)); } }
Welche Lösung Du nun gebrauchen kannst, oder am elegantesten findest, musst Du natürlich selbst entscheiden
(Die letzten beiden sollten sogar das gleiche Ergebnis liefern)[ Dieser Beitrag wurde am 27.06.2003 um 11:43 Uhr von Ingo aka Desert Hawk editiert. ]
-
Hey....cool!!!!
Danke für die Lösungen!!! Hab in der zeit auch noch etwas anderes
gewerkelt'...bei mir hat er die "while schleife" nicht angenommen
es gab immer probs mit der catch Aweisung.
Na ja, und dann hatte ich noch etwas komliziertes programmiert und zwar:[java]
import java.io.IOException;class arrays_test {
public static void main(String[] args) throws IOException {
double[] dblvar = arrayFuellen();
System.out.println(arrays.double_avg(dblvar));
}public static double[] arrayFuellen() throws IOException {
double[] dblvar = { };
int wert = -1;while (wert == -1) {
System.out.print("Bitte geben Sie die Anzahl der Werte an, und drücken Sie anscließend die Eingabetaste: ");
wert = readInt();
}while (wert == 0) {
System.out.println("Es sind nur Zahlen zwischen 1-9 zulässig.");
System.out.print("Bitte geben Sie die Anzahl der Werte an, und drücken Sie anscließend die Eingabetaste: ");
wert = readInt();
}dblvar = new double[wert];
wert = -1;
for (int i = 0; i < dblvar.length; i++) {
while (wert == -1) {
System.out.print("Bitte geben Sie den " + (i + 1) + ".Wert ein, und drücken Sie anscließend die Eingabetaste: ");
wert = readInt();
}while (wert == 0) {
System.out.println("Es sind nur Zahlen zwischen 1-9 zulässig.");
System.out.print("Bitte geben Sie den " + (i + 1) + ".Wert ein, und drücken Sie anscließend die Eingabetaste: ");
wert = readInt();
}dblvar[i] = wert;
wert = -1;
}return dblvar;
}static int readInt() throws IOException {
int t = 0;
int a = 0;do {
t = System.in.read();
} while ((t == 32) || (t == 10) || (t == 13));while ((48 <= t) && (t < 58)) {
a = (a * 10) + (t - 48);
t = System.in.read();
}return a;
}
}[/code]Doch letztendlich hab mich für die letzte variante entschieden "i--;"
Nochmals vielen Dank!