Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Code Fehler - Bitte um Hilfe

Empfohlene Antworten

Veröffentlicht

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

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.

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

  • Autor

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

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.

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.

  • Autor

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 ?

paste mal den compiler fehler bitte.

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

  • Autor

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

      }

   }

}

Ja in meinen Augen macht eine For Schleife mehr Sinn.

  • Autor

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

?

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

  • Autor

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.