Snipeee Geschrieben 9. Januar 2010 Geschrieben 9. Januar 2010 public class Kontotest2 { /** * @param <field> * @param args */ public static <field> void main(String[] args) { // TODO Auto-generated method stub String[] name = new String[10]; double [] betrag = new double[10]; int [] nummer = new int [10]; int eingabe; int i = 0; do { System.out.println("Bitte geben sie einen Kontonamen ein"); name[i]=Kbd.readLine(); System.out.println("Bitte geben sie einen Betrag ein für: " + name[i]); betrag[i]=Kbd.readDouble(); System.out.println("Bitte geben sie eine Kontonummer für das Konto " + name[i] + " ein:"); nummer[i]=Kbd.readInt(); System.out.println("(1) Weiteres Konto - (2) Fertig"); eingabe = Kbd.readInt(); }while(eingabe==1); System.out.println("###Kontoname: " + name[i]+" = ###Kontostand: "+betrag[i]+"euro ###Kontonummer = " + nummer[i]); } } Man kann dort bis zu 10 verschiedene Konten eintragen. Aber gibt immer nur das letztere aus, kann mir jemand sagen wo der Fehler liegt? Danke Zitieren
Bubble Geschrieben 9. Januar 2010 Geschrieben 9. Januar 2010 Das ist einfach: Mit der Zeile System.out.println("###Kontoname: " + name[i]+" = ###Kontostand: "+betrag[i]+"euro ###Kontonummer = " + nummer[i]); werden nur die Felder mit dem Index i, der noch den bei der letzten Eingabe verwendetet Wert hat, ausgegeben. Wenn alle ausgegeben werden sollen, dann muss dies in einer Schleife passieren. Außerdem muss mitgezählt werden, wie viele Eingaben getätigt wurden. Ein anders Problem des Programmes ist, dass nach maximal 10 Eingaben nicht abgebrochen wird, danach jedoch die angelegte Feldgröße überschritten ist. Zitieren
bequiet Geschrieben 9. Januar 2010 Geschrieben 9. Januar 2010 (bearbeitet) Mich würd mal Interessieren was das fürne Aufgabe ist? Studium/Schule? Oder baust nur aus Spaß sone Aufgabe? Weil ich denke das man das ganze auch vereinfachen könnte. Zumal ich vermute das da auch noch Einzahlugs/Auszahlungs und eventuell sogar Überweisungsberechnungen mit rein sollen oder? Desweiteren wirst du bei dem Quellcode immer ein ArrayIndexOutOfBound error kriegen. Da du keine Abbruchbedingung hast. Sprich bei dir läuft die Schleife solange, wie die eingabe == 1 ist. Aber dein Feld macht bei Index 9 schluss. Bearbeitet 9. Januar 2010 von bequiet Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 Richtig, ist eine Schulaufgabe. Ja mit ein und auszahlen das muss ich auch noch machen, Überweisen nicht. Kann mir jemand mal das mit der Schleife zeigen bzw. den Code erstellen, habe keine Ahnung wie man das machen kann das er mitzählt wieviele Eintragungen er gemacht hat? Danke schonmal Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 for (int i = 0; i < name.length; i++) { } Und was soll ich dann ausgeben lassen? Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 Na das sagte ich doch. Du musst erstmal die Abbruchbedingung einbauen das das Feld nicht überschritten wird. Dann musst du die Ausgabe in eine Schleife bauen. Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 ich Antworte mal hier auf die PM kannst du mir da mal helfen, versteh da absolut nicht? Ist das viel Aufwand? Dann könntest du mir das mal kurz abtippen, muss es Dienstag abgeben... Sorry nein. Ich bin nicht dazu da deine HA`s zu machen. Ich kann dir gerne beim Verständniss helfen. Aber ich mache nicht deine Aufgaben. Du sollst doch was lernen und vorallem ist das Thema nicht so kompliziert. Da gibt es jede Menge Fachliteratur zu. Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 Ok du hast Recht, aber ich probier ja als schon... public class Kontotest2 { /** * @param <field> * @param args */ public static <field> void main(String[] args) { // TODO Auto-generated method stub String[] name = new String[10]; double [] betrag = new double[10]; int [] nummer = new int [10]; int eingabe; int i = 0; do { System.out.println("Bitte geben sie einen Kontonamen ein"); name[i]=Kbd.readLine(); System.out.println("Bitte geben sie einen Betrag ein für: " + name[i]); betrag[i]=Kbd.readDouble(); System.out.println("Bitte geben sie eine Kontonummer für das Konto " + name[i] + " ein:"); nummer[i]=Kbd.readInt(); System.out.println("(1) Weiteres Konto - (2) Fertig"); eingabe = Kbd.readInt(); }while(eingabe==1); System.out.println("1:Kontoerstellen 2:Kontoübersicht 3:Ein/Auszahlen 4:Beenden"); switch (Kbd.readInt()) { case 1: break; case 2: for (int i = 0; i < name.length; i++) { System.out.println("###Kontoname: " + name[i]+" = ###Kontostand: "+betrag[i]+"euro ###Kontonummer = " + nummer[i]); } for (int i = 0; i < name.length; i++) { System.out.println("Kontoname"+i+" = "+name[i]); } break; case 3: System.out.println("ID eingeben"); break; case 4: System.out.println("###Programm-Ende###"); break; default: break; } } } Warum zeigt er das als Fehler an mit dem ? Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 paste mal den compiler fehler bitte. Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 (bearbeitet) Desweiteren funktioniert das hier nicht, da er solange die schleife durchläuft.. int i = 0; do { System.out.println("Bitte geben sie einen Kontonamen ein"); name[i]=Kbd.readLine(); System.out.println("Bitte geben sie einen Betrag ein für: " + name[i]); betrag[i]=Kbd.readDouble(); System.out.println("Bitte geben sie eine Kontonummer für das Konto " + name[i] + " ein:"); nummer[i]=Kbd.readInt(); System.out.println("(1) Weiteres Konto - (2) Fertig"); eingabe = Kbd.readInt(); }while(eingabe==1); wie eingabe == 1 ist. Sprich bis jemand keine Eingabe mehr macht. Allerdings hast du das Problem, das du nur 10 Felder hast. Sprich Index 0-9. Daher musst du klar festlegen, dass er die Schleife nicht öfters ausführen darf als Felder da sind. switch (Kbd.readInt()) { case 1: break; case 2: for (int i = 0; i < name.length; i++) { System.out.println("###Kontoname: " + name[i]+" = ###Kontostand: "+betrag[i]+"euro ###Kontonummer = " + nummer[i]); } for (int i = 0; i < name.length; i++) { System.out.println("Kontoname"+i+" = "+name[i]); } break; case 3: System.out.println("ID eingeben"); break; case 4: System.out.println("###Programm-Ende###"); break; default: break; } Stell dir mal vor. Er zählt die Variable i hoch. Das macht er solange bis das Feld zuende ist., Soweit so gut. Du gibst aber nur das Feld mit dem Index i aus. Sprich das Feld mit der letzten Eingabe, da er ja zuerst die Schleife oben abarbeitet. Dann machen deine beiden For schleifen da keinen Sinn.. Zumal du nicht die Variable i doppelt belegen kannst. Du solltest dir erstmal die Java Grundlagen erarbeiten. Achso. Wo hast du eigentlich den Scanner definiert? Oder Bufferedreader? Weil du hast nirgendwo die Schnittstelle zur Tastatureingabe definiert? Bearbeitet 10. Januar 2010 von bequiet Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 Also bei der oberen eher eine for schleife verweden? wo man dann so viele durchläufe wie Felder im Array?! Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 Achso. Wo hast du eigentlich den Scanner definiert? Oder Bufferedreader? Weil du hast nirgendwo die Schnittstelle zur Tastatureingabe definiert? import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; /** Eine Klasse, die drei statische Methoden definiert, um von der Tastatur Strings und Zahlen einzulesen. Gedacht fr Anfnger in der Java-Programmierung. Verwendet privat den erforderlichen BufferedReader, behandelt I/O-Fehler und wandelt Strings in Zahlen um. */ public class Kbd { /** BufferedReader - Objekt, um von der Tastatur Zeichen einzulesen */ private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); /** Liest eine Zeile von der Tastatur und verwandelt sie in eine integer-Zahl. Eingabe darf NUR Ziffern 0..9 enthalten. Auch LEERZEICHEN sind NICHT ERLAUBT. @return ganze Zahl, die der Benutzer eingegetippt hat */ public static int readInt() { String inputString = readLine(); int n = Integer.parseInt(inputString); return n; } /** Liest eine Zeile von der Tastatur und verwandelt sie in eine double-Zahl. Eingabe muss das Format einer floatingpoint-number haben. LEERZEICHEN sind NICHT ERLAUBT. @return die Zahl, die der Benutzer eingegetippt hat */ public static double readDouble() { String inputString = readLine(); double x = Double.parseDouble(inputString); return x; } /** Liest eine Zeile von der Tastatur ein. Falls unwahrscheinlicherweise ein Eingabefehler auftritt bricht das Programm ab. @return die vom Benutzer eingetippte Zeile */ public static String readLine() { String inputLine = ""; try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); } return inputLine; } /** Wartet auf ein Return von der Tatsatur ein. Falls unwahrscheinlicherweise ein Eingabefehler auftritt bricht das Programm ab. Die Methode waitForKey() ist z. B. anzuwenden, wenn ein Programm anhalten soll um erst nach Eingabe von Return fortzufahren. */ public static void waitForKey() { try { String dummy = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); } } } Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 Ja in meinen Augen macht eine For Schleife mehr Sinn. Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 for (int i = 0; i < name.length; i++) { System.out.println("Bitte geben sie einen Kontonamen ein"); name=Kbd.readLine(); System.out.println("Bitte geben sie einen Betrag ein für: " + name); betrag=Kbd.readDouble(); System.out.println("Bitte geben sie eine Kontonummer für das Konto " + name + " ein:"); nummer=Kbd.readInt(); } Jetzt weiß ich aber nicht wie ich das mit der Abbruchbedingung machen soll, wenn ich eine 1 eintippe weil die abbruch bedingung ist ja i < name.length; i++ ? Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 Ja das ist doch die Abbruchbedingung. Er läuft jetzt solange durch die Schleife, wie i < name.length ist. Sprich i<10.. Da dein Index ja von 0-9 geht, läuft er genau 10 mal durhc die Schleife und du hast deine 10 Konten. Hast du doch hiermit definiert for (int i = 0; i < name.length; i++) { Zitieren
Snipeee Geschrieben 10. Januar 2010 Autor Geschrieben 10. Januar 2010 Ja aber ich möchte doch nicht immer 10 Konten eingeben, wenn ich aber nur 2 eingegen möchte... Nach jedem eintragen soll man doch auswählen können (siehe oben) ob man ein weiteres Konto anlegen möchte oder Fertig ist.. Zitieren
bequiet Geschrieben 10. Januar 2010 Geschrieben 10. Januar 2010 Da kommst du aber früh mit. Dann musst du eben ne Switch anweisung machen und die Kontoerstellung in eine Methode packen. Dann immer nur die Methode aufrufen wenn du sie brauchst. Zitieren
Snipeee Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Richtig, so hab ich's auch gemacht ! Danke Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.