Java Error

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hoi leutz
      ich sitze grad an meinem Java projekt für den info unterricht, welches auch fast fertig ist, wären da nicht immer diese kleinen Fehler, und ich komme eben nicht mehr weiter...
      Also situation ist, dass ich ein verschlüsselungsprogramm für texte schreibe und eine dazu gehörige dechiffrierung
      das chiffrieren funktioniert alles top, nur mit dem dechiffrieren hab ich grad ein problem..
      habe dazu ein array angefertigt, damit java auch weiss in was er übersetzen soll...die verschlüsselung findet btw mit polybios statt

      Hier mal der Quellcode der Klasse die probleme bereitet:

      Kurzfassung des quellcodes: beginnt mit import, dann folgt array deklarierung, dann im konstruktor die array initialisierung, daraufhin die methode zum dechiffrieren, wobei durch die while schleife aus der txt datei gelesen wird und mittels if bedingungen festgelegt wird welche stelle die ziffer hat (denn 2 Zahlen stellen immer ein Buchstabe/zeichen/ziffer/etc pp dar)
      rest is nur schreiben in txt datei

      der fehler taucht in Zeile 126 auf, und meldet "java.lang.ArrayIndexOutOfBoundsException: 49"
      was das bedeutet bin ich mir im klaren, nur weiss ich nicht wieso genau der ummeckert, kann kein fehler meienrseits entdecken

      EDIT: sollte erwähnt werden dass das compilen funtioniert ohne probleme, der fehler tritt beim ausführen der methode auf

      ganzer quellcode:

      PHP-Quellcode

      1. import java.io.*;
      2. public class Dechiffrierung
      3. {
      4. private String Polybios[][] = new String[10][10];
      5. public Dechiffrierung()
      6. {
      7. Polybios[0][0] = "P";
      8. Polybios[0][1] = "N";
      9. Polybios[0][2] = "C";
      10. Polybios[0][3] = "V";
      11. Polybios[0][4] = "W";
      12. Polybios[0][5] = "T";
      13. Polybios[0][6] = "Y";
      14. Polybios[0][7] = "P";
      15. Polybios[0][8] = "R";
      16. Polybios[0][9] = "Ü";
      17. Polybios[1][0] = "Y";
      18. Polybios[1][1] = "A";
      19. Polybios[1][2] = "M";
      20. Polybios[1][3] = "Q";
      21. Polybios[1][4] = "S";
      22. Polybios[1][5] = "V";
      23. Polybios[1][6] = "H";
      24. Polybios[1][7] = "Ö";
      25. Polybios[1][8] = "N";
      26. Polybios[1][9] = "Ü";
      27. Polybios[2][0] = "Ü";
      28. Polybios[2][1] = "K";
      29. Polybios[2][2] = "C";
      30. Polybios[2][3] = "D";
      31. Polybios[2][4] = "M";
      32. Polybios[2][5] = "B";
      33. Polybios[2][6] = "V";
      34. Polybios[2][7] = "M";
      35. Polybios[2][8] = "A";
      36. Polybios[2][9] = "C";
      37. Polybios[3][0] = "X";
      38. Polybios[3][1] = "H";
      39. Polybios[3][2] = "";
      40. Polybios[3][3] = "!";
      41. Polybios[3][4] = "\"";
      42. Polybios[3][5] = "5";
      43. Polybios[3][6] = "?";
      44. Polybios[3][7] = "%";
      45. Polybios[3][8] = "&";
      46. Polybios[3][9] = "X";
      47. Polybios[4][0] = "(";
      48. Polybios[4][1] = ")";
      49. Polybios[4][2] = "E";
      50. Polybios[4][3] = "+";
      51. Polybios[4][4] = ",";
      52. Polybios[4][5] = "-";
      53. Polybios[4][6] = ".";
      54. Polybios[4][7] = "/";
      55. Polybios[4][8] = "0";
      56. Polybios[4][9] = "1";
      57. Polybios[5][0] = "2";
      58. Polybios[5][1] = "3";
      59. Polybios[5][2] = "4";
      60. Polybios[5][3] = "5";
      61. Polybios[5][4] = "6";
      62. Polybios[5][5] = "7";
      63. Polybios[5][6] = "8";
      64. Polybios[5][7] = "9";
      65. Polybios[5][8] = ":";
      66. Polybios[5][9] = ";";
      67. Polybios[6][0] = "B";
      68. Polybios[6][1] = "E";
      69. Polybios[6][2] = "D";
      70. Polybios[6][3] = "?";
      71. Polybios[6][4] = "O";
      72. Polybios[6][5] = "W";
      73. Polybios[6][6] = "Ä";
      74. Polybios[6][7] = "Z";
      75. Polybios[6][8] = "S";
      76. Polybios[6][9] = "O";
      77. Polybios[7][0] = "L";
      78. Polybios[7][1] = "R";
      79. Polybios[7][2] = "U";
      80. Polybios[7][3] = "F";
      81. Polybios[7][4] = "Q";
      82. Polybios[7][5] = "G";
      83. Polybios[7][6] = "O";
      84. Polybios[7][7] = "Ä";
      85. Polybios[7][8] = "T";
      86. Polybios[7][9] = "J";
      87. Polybios[8][0] = "T";
      88. Polybios[8][1] = "I";
      89. Polybios[8][2] = "A";
      90. Polybios[8][3] = "W";
      91. Polybios[8][4] = "D";
      92. Polybios[8][5] = "G";
      93. Polybios[8][6] = "K";
      94. Polybios[8][7] = "F";
      95. Polybios[8][8] = "I";
      96. Polybios[8][9] = "Z";
      97. Polybios[9][0] = "Ö";
      98. Polybios[9][1] = "[";
      99. Polybios[9][2] = "\\";
      100. Polybios[9][3] = "]";
      101. Polybios[9][4] = "K";
      102. Polybios[9][5] = "U";
      103. Polybios[9][6] = "ß";
      104. Polybios[9][7] = "E";
      105. Polybios[9][8] = "R";
      106. Polybios[9][9] = "L";
      107. }
      108. public void Dechiffrierung(String dateiname){
      109. FileReader file;
      110. int c;
      111. int c1 = 0;
      112. int c2 = 0;
      113. String sammle = "";
      114. int flag = 1;
      115. try {
      116. file = new FileReader(dateiname+"_chiff.txt");
      117. while ((c = file.read()) != -1) {
      118. if (flag == 0) {c2 = c; flag = -1; sammle = sammle + Polybios[c1][c2];};
      119. if (flag == 1) {c1 = c; flag = 0; };
      120. if (flag ==-1) flag = 1;
      121. }
      122. } catch (IOException e) {
      123. System.out.println("Fehler beim Lesen der Datei festgestellt."); }
      124. FileWriter file_dechiff;
      125. try {
      126. file_dechiff = new FileWriter(dateiname+"_dechiff.txt");
      127. file_dechiff.write(sammle);
      128. file_dechiff.close();
      129. } catch (IOException e) {
      130. System.out.println("Fehler beim Erstellen der Datei festgestellt.");
      131. }
      132. }
      133. }
      Alles anzeigen
    • also die java.lang.ArrayIndexOutOfBoundsException tritt auf wenn du über die Array grenzen hinaus stößt.

      Kann es sein, dass das File zu lang ist? Weil du schreibst ja while((c=file.read()) != -1). Wenn jetzt das File zulang ist, stößt du über die Grenzen.

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • Bei der arrayoutofboundsexception handelt es sich um einen sogenannten "Laufzeitfehler". Deswegen kannst du auch problemlos kompilieren. Wie bereits von Zinnsoldat erwähnt handelt es sich dabei um einen Fehler, der ausgelöst wird, wenn du einen Index eines Arrays abfrägst, der seine Grösse übersteigt. Der Fehler liegt folglich genau hier "Polybios[c1][c2]". Wie du aus dem 49 entnehmen kannst ist der Index 49. D.h. c1 oder c2 ist 49. Also ist entweder dein Array fehlerhaft oder dein File ist es. Wenn du mal dein codiertes File anhängen würdest könnte man dir vlt besser helfen. Auf jedenfall läuft das Programm so, bei fast jedem Zeichen, das es liest auf eine ArrayOutOfBoundsException raus.
    • Nunja, das array hat ja eine größe von 100 felder, somit dürfte 49 noch lange nicht genug sein

      die methode liesst ja aus der .txt immer 1 zeichen, die txt sieht momentan beim test so aus:

      PHP-Quellcode

      1. 1611707069328472322599178481131025420101813236950294053281183235820328


      er liest also zuerst die 1, speichert diese in c1 rein, und schaltet den flag um, nun liesst er die 6 und speichert in c2 rein, somit sind c1 und c2 nun belegt, sodass er danach sofort sammle = sammle + Polybios[c1][c2] ausführt, also die den buchstaben bei index 16 (was hier ein H wäre) anzeigen, somit müsste der also in sammle (ein string) gespeichert werden

      nun hab ich die txt mal bisl verkleinert:

      PHP-Quellcode

      1. 281111



      und dabei spuckt er gleichen error nur mit 50 aus..kA warum

      die gesamte fehlermeldung in der methodenkonsole die sich dann auch öffnet, sieht bisher wie folgt aus:

      PHP-Quellcode

      1. java.lang.ArrayIndexOutOfBoundsException: 49
      2. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:139)
      3. java.lang.ArrayIndexOutOfBoundsException: 48
      4. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:137)
      5. java.lang.ArrayIndexOutOfBoundsException: 49
      6. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)
      7. java.lang.ArrayIndexOutOfBoundsException: 49
      8. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)
      9. java.lang.ArrayIndexOutOfBoundsException: 50
      10. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)



      da stehen überall ja zahlen über 100, nur kann ich mir nicht erklären warum...er müsste also bei c1 und c2 zu viel reinspeichern, odeR?

      EDIT: wenn du also meinst, dass c1 bzw c2 49 ist...frag ich warum er das einspei....wartet Oo
      eben was testen
      kann es sein, dass..


      ARGH, hab mein fehler entdeckt...die 49 bzw 48 bzw 50 sind die ASCII codes für die jeweiligen ziffern, es muss also die zahl die er liest als ziffer übergeben werden :<
      jemand ne ahnung wie ich das etz umschreiben könnt?
    • Wegeditiert

      Naja ziehe einfach 48 ab...

      Wenn nun 49 die Zahl ist => Ziffer 1 => 49-48 = 1

      EDIT:
      Noch ein Tipp:
      Dieses Array folgeschreibe ist nicht sehr elegant.. Schreib die Zeichen in ein File und lese dann in einer verschachtelten forschleife die Daten aus

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • Zinnsoldat schrieb:

      Wegeditiert

      Naja ziehe einfach 48 ab...

      Wenn nun 49 die Zahl ist => Ziffer 1 => 49-48 = 1

      EDIT:
      Noch ein Tipp:
      Dieses Array folgeschreibe ist nicht sehr elegant.. Schreib die Zeichen in ein File und lese dann in einer verschachtelten forschleife die Daten aus
      oh, ja, danke so könntest gehen ^^

      zum Edit: wennde mir nochn tip geben magst wie genau ^^?
    • Nunja
      Du brauchst die Klasse, die die Methode readLine implementiert. Weiß ich grad nicht auswendig

      dann machst du

      Quellcode

      1. for(int i = 0; i<10; i++)
      2. {
      3. for(int j = 0; j<10;j++)
      4. {
      5. array[i][j] = Integer.ParseInt(reader.readLine());
      6. }
      7. }


      EDIT:
      Das File muss halt dann so aufgebaut sein

      Quellcode

      1. A
      2. B
      3. C
      4. D
      5. E
      6. usw

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • Also ich habs mal versucht und ziemlich viel gegooglet, kam im endeffekt auf folgendes:

      PHP-Quellcode

      1. public Dechiffrierung()
      2. {
      3. BufferedReader reader;
      4. try
      5. {
      6. for(int i = 0; i<10; i++)
      7. {
      8. for(int j = 0; j<10;j++)
      9. {
      10. Polybios[i][j] = String.ParseString(reader.readLine());
      11. }
      12. }
      13. } catch(IOException e)
      14. {
      15. System.out.println("Fehler beim Erstellen der Datei festgestellt.");
      16. }
      17. }
      Alles anzeigen


      Nun meckert er aber folgenden fehler runter: cannot find symbol - method ParseInt(java.lang.string)
      und ehrlich gesagt kA...und weiss nichmal ob das so reicht für readline

      EDIT: wobei er vorher, bevor ich "BufferedReader reader;" eingeführt hatte, immer meckerte dass er readLine() nicht kennt, seitdem kennt er parseInt nicht...
    • Du schreibst String.ParseString.. Warum nicht Integer.parseInt
      Außerdem schreibst du ParseString.. In Java wird parseString geschrieben, da Methodennamen klein geschrieben werden

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • weil die Methode parseString heißt und nicht ParseString

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • HappyTiger schrieb:

      Nunja, das array hat ja eine größe von 100 felder, somit dürfte 49 noch lange nicht genug sein

      die methode liesst ja aus der .txt immer 1 zeichen, die txt sieht momentan beim test so aus:

      PHP-Quellcode

      1. 1611707069328472322599178481131025420101813236950294053281183235820328


      er liest also zuerst die 1, speichert diese in c1 rein, und schaltet den flag um, nun liesst er die 6 und speichert in c2 rein, somit sind c1 und c2 nun belegt, sodass er danach sofort sammle = sammle + Polybios[c1][c2] ausführt, also die den buchstaben bei index 16 (was hier ein H wäre) anzeigen, somit müsste der also in sammle (ein string) gespeichert werden

      nun hab ich die txt mal bisl verkleinert:

      PHP-Quellcode

      1. 281111



      und dabei spuckt er gleichen error nur mit 50 aus..kA warum

      die gesamte fehlermeldung in der methodenkonsole die sich dann auch öffnet, sieht bisher wie folgt aus:

      PHP-Quellcode

      1. java.lang.ArrayIndexOutOfBoundsException: 49
      2. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:139)
      3. java.lang.ArrayIndexOutOfBoundsException: 48
      4. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:137)
      5. java.lang.ArrayIndexOutOfBoundsException: 49
      6. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)
      7. java.lang.ArrayIndexOutOfBoundsException: 49
      8. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)
      9. java.lang.ArrayIndexOutOfBoundsException: 50
      10. at Dechiffrierung.Dechiffrierung(Dechiffrierung.java:135)



      da stehen überall ja zahlen über 100, nur kann ich mir nicht erklären warum...er müsste also bei c1 und c2 zu viel reinspeichern, odeR?

      EDIT: wenn du also meinst, dass c1 bzw c2 49 ist...frag ich warum er das einspei....wartet Oo
      eben was testen
      kann es sein, dass..


      ARGH, hab mein fehler entdeckt...die 49 bzw 48 bzw 50 sind die ASCII codes für die jeweiligen ziffern, es muss also die zahl die er liest als ziffer übergeben werden :<
      jemand ne ahnung wie ich das etz umschreiben könnt?

      Sinnvollerweise tust du via explizitem typecast den int zu einem char casten und diesen dann zu einem Integer.
      E: Benutzt du eig. kein Eclipse?
    • Sabre.Ninja schrieb:

      Sinnvollerweise tust du via explizitem typecast den int zu einem char casten und diesen dann zu einem Integer.
      Dann kriegt er aber auch wieder die selben Werte..

      <Zinnsoldat> Warbringer willst heute auch das ravens game casten? ^^
      <@Nappo> überlastet den armen Warbringer doch nich so :)
      <@Nappo> wobei er is chinese die arbeiten mindestens 25 stunden am tag und 200 Stunden in der Woche

      ProudBavarian schrieb:

      € netter guide twoplay, aber dein ava suckt trotzdem :)
      Guten Morgen an:
      Muh, Proud, Sleepy, Hi2u, Seren, Incognito, Wing, Juff, Sic, banez-, arrow^gunz, Cloud, Zenarius, Tobi, q0ry und der Rest des DS-Stammtischs


    • Allgemeiner Tip: verwende keine sinnlosen Variablen. Wenn du iterierst, dass sag über was z.B. row_nr und col_nr

      Wir haben 100 Hacker und Hacksen gefragt: "Was die schrecklichste Programmiersprache, in der du je programmiert hast?"
      1. Java
      2. PHP
      3. Visual Basic
      4. BASIC
    • @Zinnsoldat, achso mein fail ._.

      @Sabre das also statt "= c - 48;" ?

      @Tass, mit fachbegriffen hab ich mein lebenlang schon probleme gehabt, was is also iterieren o.o

      und das was momentan da ist is alles vorläufig, ich will erstmal das programm zum laufen bringen
      bis dienstag muss es fertig sein und dazu kommt dann noch überall erklärung der variablen/methoden/etc hin und ne bedienungsanleitung für dummies =)

      ich hab in 2h wieder info, da werd ich ja weiterarbeiten und mein lehrer auchmal wieder ranholen, könnt trotzdem weiter ratschläge geben, weil ich da sicherlich auch mal hier rein gucken werd ^-^

      bisher soweit danke =D
    • So blubb, ich hab das mit der file übergabe nun versucht und noch einen fehler:
      er findet die datei wo er das auslesen soll nicht

      Quelltext:

      PHP-Quellcode

      1. public Dechiffrierung()
      2. {
      3. File datei = new File("C:/BlueJ/Cheffrierungsverfahren/Cheffrierungsverfahren/Polybios.txt");
      4. if (datei.exists()) {System.out.println("ja");}
      5. else System.out.println("nein");
      6. try
      7. {
      8. BufferedReader reader = new BufferedReader(new FileReader(datei));
      9. for(int i = 0; i<10; i++)
      10. {
      11. for(int j = 0; j<10;j++)
      12. {
      13. Polybios[i][j] = reader.readLine();
      14. System.out.println(reader.readLine());
      15. }
      16. }
      17. } catch(IOException e) {System.out.println("Fehler beim Erstellen des Arrays festgestellt.");}
      18. }
      Alles anzeigen


      die .exists() methode is nur zum testen da ob er sie findet
      und das tut er nicht

      also frage ist, wie man das schreiben muss, dass er die datei findet (OS ist windoof xp)
      mit den normalen "\" zwischen dem ordner hab ichs schon versucht, klaupt auch nicht (ja auch \\ geschrieben, damit er das zeichen als solches erkennt)

      PS: ich bin das WE weg, also kann erst am sonntag antworten, wäre aber froh, wenn ich hilfe bis dahin hätte
      PPS: ich weiss, dass ich chiffrierung im ordner falsch geschrieben habe

      danke mal wieder, bis denne
    • Benutzer online 1

      1 Besucher