Programm läuft - trotzdem noch ein Fehler drin.

  • Themenstarter Themenstarter Destiny1985
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

Destiny1985

Gast
Ich habe einen kleinen, einfachen Terminkalender geschrieben:

Code:
/**
 * Ein Terminkalender
 * Funktioniert für ein ganzes Jahr
 *
 * @author Christopher Koch
 * @date 2005-01-14
 * @version 1.3
 */

import Prog1Tools.IOTools;

public class Terminkalender3
{
  public static void main (String args[])
  {
    String[][][] termine;

    termine = new String[12][][];
    termine[0] = new String[31][24];
    termine[1] = new String[28][24];
    termine[2] = new String[31][24];
    termine[3] = new String[30][24];
    termine[4] = new String[31][24];
    termine[5] = new String[30][24];
    termine[6] = new String[31][24];
    termine[7] = new String[31][24];
    termine[8] = new String[30][24];
    termine[9] = new String[31][24];
    termine[10] = new String[30][24];
    termine[11] = new String[31][24];

    for (int i = 0; i < termine.length; i++)
      for (int j = 0; j < termine[i].length; j++)
        for (int k = 0; k < termine[i][j].length; k++)
          termine[i][j][k] = "";
          
    boolean fertig = false;
    
    while (!fertig)
    {
      System.out.println("\n1 - Neuer Eintrag");
      System.out.println("2 - Termine anzeigen");
      System.out.println("3 - Programm beenden");

      int auswahl = IOTools.readInteger("\nIhre Wahl: ");
      
      switch (auswahl)
      {
        case 1:
        {
          int monat = IOTools.readInteger("\nMonat: ");
          if (monat < 1 || monat > 12)
          {
            System.out.println("\nEingabefehler!");
            break;
          }
          int tag = IOTools.readInteger("\nTag: ");
          if (tag < 1 || tag > 31)
          {
            System.out.println("\nEingabefehler!");
            break;
          }
          int zeit = IOTools.readInteger("\nUhrzeit: ");
          if (zeit < 0 || zeit > 23)
          {
            System.out.println("\nEingabefehler");
            break;
          }
          String eingabe = IOTools.readLine("\nTermin: ");
          termine[monat-1][tag-1][zeit] = eingabe;
          break;
        }
        case 2:
        {
         int m = IOTools.readInteger("\nMonat: ");
          if (m < 1 || m > 12)
          {
            System.out.println("\nEingabefehler");
            break;
          }
         int t = IOTools.readInteger("\nTag: ");
          if (t < 1 || t > 31)
          {
            System.out.println("\nEingabefehler");
            break;
          }
          for (int i = 0; i < termine[m-1].length; i++)
            for (int j = 0; j < termine[m-1][t-1].length; j++)
            {
              System.out.println(i + " Uhr: " + termine[m-1][t-1][i]);
              break;
            }
        }
        case 3:
        {
          fertig = true;
          break;
        }
        default:
        {
          System.out.println("Eingabefehler");
        }
      }
    }
  }
}

er lässt sich wunderbar ausführe und so...aber wenn ich mir eingetragene Termine anzeigen lasse, bekomme ich noch die Meldung:

Code:
Exception in thread "main"  java.lang.ArrayIndexOutOfBoundsException: 24
            at Terminkalender3.main(Terminkalender3.java:90)

ok, irgendein feld läuft quasi über...aber wo ? ich find den fehler nicht :<

das programm wird bei euch wohl nicht laufen, da ich die Klasse IOTools nutze um Eingaben zu vereinfachen...die findet ihr im Paket Prog1Tools auf der Seite www.grundkurs-java.de...

mfg
 
in der Zeile 90??

Sagt mal seid ihr all bisi #?!"§$ oder warum kann keiner ne Exception lesen??

Es steht ja alles da was passiert, ein Array out of bound und die Zeile, was will man mehr? Das er dir noch einen Pfeil hinmacht

System.out.println(i + " Uhr: " + termine[m-1][t-1]); <- das i wird rüberschießen oder irgendeine von den Variablen!
 
ich verstehe aber nicht warum...müsste er das nicht schon früher bemängeln, wenn er allers auf leer setzt oder bei der Eingabe ? Wieso nur bei der Ausgabe ?

btw denke ich das dieses Forum nicht umsonst "Anfängerforum" heisst...natürlich kann es sein das du von Anfang an wusstest was jeder Fehler genau sagt und wie der entsteht usw...mir fehlt diese Fähigkeit ... tut mir leid
 
Sieht fast so aus als ob deine Variable j oder i zu groß wird! Hab es jetzt aber nur aus der Fehlermeldung und den Zeilen 88 - 90 geschlossen.
 
ja aber wiesooooo :> wo ist der fehler, das die zu groß wird...
 
aus deinem code ab zeile 89 oder so:
Code:
            for (int j = 0; j < termine[m-1][t-1].length; j++) 
            { 
              System.out.println(i + " Uhr: " + termine[m-1][t-1][i]); 
              break; 
            }

ähm seh ich das richtig das er diese schleife nur einmal durchläuft weil er sie gleich nach der ausgabe abbricht? macht das die schleife nicht irgendwie überflüssig oder überseh ich da etwas..? ???:L
 
das break is wichtig, da er sonst für den kompletten monat die zeiten anzeigt, net nur für den tag....

also statt

0 uhr
1 uhr
2 uhr

steht dann halt

0 uhr
0 uhr
....
0 uhr
1 uhr
...
usw

also das break hat schon seine berechtigung
 
Dein i ist < der Länge von termine.length

Du fragst nachher aber mit dem i termine[x][y] ab

da dein i größer als termine[x][y].length wahrscheinlich wird bekommst du diese Exception!

Du kannst net die 1. Variable für das du ein Limit auf den 1 Index gesetzt hast den 3ten Index abfragen!!!
 
wie löse ich das problem ?

ich rall es net oO

kannst mir mal code hinschreiben bitte wie es funktionieren müsste ?

mfg
 
Wenn ich jetzt nicht auf der Arbeit währe, bzw. keinen Abteilungsdurchlauf hätte, könnte ich es mal ausprobieren. Musst warten bis ich um 16:30 Uhr daheim bin 😀
 
Bin ja auch gerade an der Arbeit :> muss Java beruflich lernen *g* wäre schön wenn du das probieren würdest, werd' aber wohl erst Montag dann wieder antworten können.

mfg
 
is ja net schlimm :> bin dankbar wenn ich überhaupt hilfe bekomme 😉 und wie gesagt vor monatg les ich das eh nich.
 
Code:
          for (int i = 0; i < termine[m-1].length; i++) 
            for (int j = 0; j < termine[m-1][t-1].length; j++) 
            { 
              System.out.println(i + " Uhr: " + termine[m-1][t-1][i]); 
              break; 
            }

Fuer was ist eigentlich j gut? Sieht fuer mich stark nach einem Tippfehler aus, versuch mal ...[j] anstelle von ....
 
OK, ich hab mich mal hingehockt! Problem ist ganz einfach: Du versuchst bei deiner Ausgabe die Uhrzeit 24 Uhr anzuzeigen (gibts aber nicht -> entweder 0 Uhr oder 23 Uhr) also ganz einfach noch ne if Bedingung einbauen:

Code:
for (int i = 0; i < termine[m-1].length; i++) 
{
   for (int j = 0; j < termine[m-1][t-1].length; j++) 
   { 
      System.out.println(i + " Uhr: " + termine[m-1][t-1][i]); 
          break; 
   } 
   if (i >= 23)
   {
      break;
   }
}

Ist es absicht, dass sich das Programm nach der Abfrage beendet?

Gruß Hobbit im Blutrausch
 
Nee Beni das j hat schon seine Berechtigung, is ja schließlich ein 3-dimensionales Feld, und damit funktioniert der Zugriff. Ich habe meinen Programm gemäß Hobbit seiner Inspiration ( *gg* ) wie folgt umgewandelt:

Code:
  for (int i = 0; i < termine[m-1].length; i++)
     for (int j = 0; j < termine[m-1][t-1].length; j++)
     {
        if (i > 23)
        {
           break;
        }
               
       System.out.println(i + " Uhr: " + termine[m-1][t-1][i]);
       break;
     }

...und was soll ich sagen...es funktioniert 😛 thx 4 help !!

mfg

Destiny

( btw: World of Warcraft is so fett ^^ )
 
vielleicht wäre es auch viel einfacher zu schreiben:

Code:
  for (int i = 0; i <= 23; i++) 
     for (int j = 0; j < termine[m-1][t-1].length; j++) 
     {                 
       System.out.println(i + " Uhr: " + termine[m-1][t-1][i]); 
       break; 
     }
 
hm ich lass mein ding jetzt so wie es ist, weil so funktioniert es und so versteh ich es auch :>

trotzdem thx *gg*
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben