Zum Inhalt springen

Code Fehler - Bitte um Hilfe


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben (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 von bequiet
Geschrieben

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

Geschrieben

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.

Geschrieben

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 ?

Geschrieben (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 von bequiet
Geschrieben

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);

      }

   }

}

Geschrieben

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++

?

Geschrieben

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++) {

Geschrieben

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..;)

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...