BlueJ Problem

Quao

Grünschnabel
Hey
habe hier ein Problem bei meinem BlueJ Project. Sobald ich alles Erstellt habe, rufe ich die Methode "knacken" in der Klasse "Knacker" auf. Diese gibt mir jedoch nicht wie gewünscht den Inhalt der Klasse "Code" sondern rasselt durch mein Array "buchst" in der Klasse "Zeichen" komplett durch. Ich hoffe mir kann jemand helfen. Hier sind die Klassen:
Code:
Code:
public class Code
{
    private String code;
    private String inhalt;

    public Code(String xinhalt, String xcode)
    {
        code = xcode;
        inhalt = xinhalt;
        
    }
    public void codeAendern(String alterCode, String neuerCode)
    {
        if( alterCode == code){
            code = neuerCode;
            System.out.println("Neuer Code festgelegt");
        }
    }
    public void inhaltAendern(String xCode, String neuerInhalt)
    {
        if( xCode == code){
            inhalt = neuerInhalt;
            System.out.println("Neuer Inhalt festgelegt");
        }
    }
    public String inhaltGeben(String xCode)
    {
        if( xCode == code){
            return inhalt;
        } else{
            return "Code falsch";
        }
    }
}

Zeichen:
Code:
public class Zeichen
{
    String[] buchst;
    String[] zap;
    String[] zap2;

    public Zeichen()
    {
        zap2 = new String[438976];
        zap = new String[5776];
        buchst = new String[76];
        buchst[0] = "";
        buchst[1] = "a";
        buchst[2] = "b";
        buchst[3] = "c";
        buchst[4] = "d";
        buchst[5] = "e";
        buchst[6] = "f";
        buchst[7] = "g";
        buchst[8] = "h";
        buchst[9] = "i";
        buchst[10] = "j";
        buchst[11] = "k";
        buchst[12] = "l";
        buchst[13] = "m";
        buchst[14] = "n";
        buchst[15] = "o";
        buchst[16] = "p";
        buchst[17] = "q";
        buchst[18] = "r";
        buchst[19] = "s";
        buchst[20] = "t";
        buchst[21] = "u";
        buchst[22] = "v";
        buchst[23] = "w";
        buchst[24] = "x";
        buchst[25] = "y";
        buchst[26] = "z";
        buchst[27] = "1";
        buchst[28] = "2";
        buchst[29] = "3";
        buchst[30] = "4";
        buchst[31] = "5";
        buchst[32] = "6";
        buchst[33] = "7";
        buchst[34] = "8";
        buchst[35] = "9";
        buchst[36] = "0";
        buchst[37] = "ß";
        buchst[38] = "=";
        buchst[39] = "+";
        buchst[40] = "-";
        buchst[41] = "_";
        buchst[42] = "*";
        buchst[43] = "!";
        buchst[44] = "?";
        buchst[45] = "A";
        buchst[46] = "B";
        buchst[47] = "C";
        buchst[48] = "D";
        buchst[49] = "E";
        buchst[50] = "F";
        buchst[51] = "G";
        buchst[52] = "H";
        buchst[53] = "I";
        buchst[54] = "J";
        buchst[55] = "K";
        buchst[56] = "L";
        buchst[57] = "M";
        buchst[58] = "N";
        buchst[59] = "O";
        buchst[60] = "P";
        buchst[61] = "Q";
        buchst[62] = "R";
        buchst[63] = "S";
        buchst[64] = "T";
        buchst[65] = "U";
        buchst[66] = "V";
        buchst[67] = "W";
        buchst[68] = "X";
        buchst[69] = "Y";
        buchst[70] = "Z";
        buchst[71] = "§";
        buchst[72] = "$";
        buchst[73] = "%";
        buchst[74] = "/";
        buchst[75] = "&";
        
    }
    public void zappen()
    {
        int a = 0;
        int b = 0;
        int c = 0;
     
        zap[ c] = buchst[a]+buchst[b];
        for(int i = 1; i < (5776); i++){
            c = c+1;
            if(b == 75){
                
                a = a+1;
                b = 0;
            }
            else
            {
                b = b+1;
            }
            
            zap[ c] = buchst[a]+buchst[b];
     
       
         
        }
        System.out.println("fertig");
    }
    public void zappen2()
    {
        int a = 0;
        int b = 0;
        int c = 0;
     
        zap2[ c] = zap[a]+buchst[b];
        for(int i = 1; i < (438976); i++){
            c = c+1;
            if(b == 75){
                
                a = a+1;
                b = 0;
            }
            else
            {
                b = b+1;
            }
            
            zap2[ c] = zap[a]+buchst[b];
     
       
         
        }
        System.out.println("fertig");
    }
    public String zapGeben(int nummer)
    {
        return zap2[nummer];
    }
}

Knacker:
Code:
public class Knacker
{
    public Knacker()
    {
    }
    public void knacken(Code xCode, Zeichen xZeichen)
    {
        int a = 0;
        while(xCode.inhaltGeben(xZeichen.zapGeben(a)).equals ("Code falsch")){
            a = a+1;
        }
        System.out.println(xCode.inhaltGeben(xZeichen.zapGeben(a)));
    }
}

Wär cool, wenn mir einer ne Lösung schreibt.
Danke
 
Hallo und herzlich willkommen im Forum!
Bitte, bitte, bitte pack deinen Code in die code-Tags (siehe meine Signatur). Dann kann man deinen Code besser lesen, weil er farblich markiert wird und ist außerdem besser scrollbar und mit Zeilennummern versehen. Und die Einrückungen wären dann auch sichtbar.
 
Zu deinem Code:
Warum erzeugst du mit 'zap' und 'zap2' ein solches, gigantisches String[] ?
Warum nutzt du für 'buchst' ein String[], ein char[] wäre geschickter!
Was hast du mit diesem Code vor?
Ein bisschen kommentieren wäre hilfreich:
Java:
/**
Javadoc für Methoden und Klassen
**/
public class Code{
	// Zeilenkommentare für zwischendurch

	/* so macht man
	mehrzeilige
	Kommentare */
}

Hey
habe hier ein Problem bei meinem BlueJ Project. Sobald ich alles Erstellt habe, rufe ich die Methode "knacken" in der Klasse "Knacker" auf. Diese gibt mir jedoch nicht wie gewünscht den Inhalt der Klasse "Code" sondern rasselt durch mein Array "buchst" in der Klasse "Zeichen" komplett durch. Ich hoffe mir kann jemand helfen.
Welchen Inhalt der Klasse Code meinst du? Auf den Quelltext kannst du zur Laufzeit deines Programmes nicht zugreifen. Meinst du den String inhalt?
Was meinst du mit dem letzten Satz? Wird der Inhalt dieses Arrays ausgegeben? Wenn ja, dann geschieht das in anderem Code, nicht in dem hier sichtbaren.
 
Erstmal danke für den Tip mit dem Java Code. Dann, mit dem Project habe ich nichts vor, mir war nur langweilig undich wollte wissen ob das so funktioniert. Um es bei der Methode "knacken" nicht zu kompliziert zu machen habe ich durch die Methoden "zap" und "zap2" alle Möglichkeiten aufgestellt, wie diese Zeichen im dreistelligen Bereich angeordnet sein können. Das mit dem "char" wusste ich nicht, da ich das Programm sonst nur in der Schule verwende.
Hier habe ich die Klassen nochmal in dem Java Code:
Code java:
Java:
public class Code
{
private String code;
private String inhalt;

public Code(String xinhalt, String xcode)
{
/* Hier gebe ich zuerst meinen Inhalt 
und dann meinen Code an */
code = xcode;
inhalt = xinhalt;

}
public void codeAendern(String alterCode, String neuerCode)
{
if( alterCode == code){
code = neuerCode;
System.out.println("Neuer Code festgelegt");
}
}
public void inhaltAendern(String xCode, String neuerInhalt)
{
if( xCode == code){
inhalt = neuerInhalt;
System.out.println("Neuer Inhalt festgelegt");
}
}
public String inhaltGeben(String xCode)
{
/* In dieser Methode möchte ich 
den Inhalt zurückgegeben bekommen, 
den ich nur bekomme, 
wenn ich meinen Code richtig eingebe */
if( xCode == code){
return inhalt;
} else{
return "Code falsch";
}
}
}
Zeichen:
public class Zeichen
{
String[] buchst;
String[] zap;
String[] zap2;

public Zeichen()
{
zap2 = new String[438976];
zap = new String[5776];
/* Hier erstelle ich ein Array, 
in dem jedes Zeichen einer Zahl zugeordnet wird */
buchst = new String[76];
buchst[0] = "";
buchst[1] = "a";
buchst[2] = "b";
buchst[3] = "c";
buchst[4] = "d";
buchst[5] = "e";
buchst[6] = "f";
buchst[7] = "g";
buchst[8] = "h";
buchst[9] = "i";
buchst[10] = "j";
buchst[11] = "k";
buchst[12] = "l";
buchst[13] = "m";
buchst[14] = "n";
buchst[15] = "o";
buchst[16] = "p";
buchst[17] = "q";
buchst[18] = "r";
buchst[19] = "s";
buchst[20] = "t";
buchst[21] = "u";
buchst[22] = "v";
buchst[23] = "w";
buchst[24] = "x";
buchst[25] = "y";
buchst[26] = "z";
buchst[27] = "1";
buchst[28] = "2";
buchst[29] = "3";
buchst[30] = "4";
buchst[31] = "5";
buchst[32] = "6";
buchst[33] = "7";
buchst[34] = "8";
buchst[35] = "9";
buchst[36] = "0";
buchst[37] = "ß";
buchst[38] = "=";
buchst[39] = "+";
buchst[40] = "-";
buchst[41] = "_";
buchst[42] = "*";
buchst[43] = "!";
buchst[44] = "?";
buchst[45] = "A";
buchst[46] = "B";
buchst[47] = "C";
buchst[48] = "D";
buchst[49] = "E";
buchst[50] = "F";
buchst[51] = "G";
buchst[52] = "H";
buchst[53] = "I";
buchst[54] = "J";
buchst[55] = "K";
buchst[56] = "L";
buchst[57] = "M";
buchst[58] = "N";
buchst[59] = "O";
buchst[60] = "P";
buchst[61] = "Q";
buchst[62] = "R";
buchst[63] = "S";
buchst[64] = "T";
buchst[65] = "U";
buchst[66] = "V";
buchst[67] = "W";
buchst[68] = "X";
buchst[69] = "Y";
buchst[70] = "Z";
buchst[71] = "§";
buchst[72] = "$";
buchst[73] = "%";
buchst[74] = "/";
buchst[75] = "&";

}
/* In den beiden zap Methoden 
lass ich diese Zeichen nun im 
dreistelligen Bereich alle Möglichkeiten durchgehen */
public void zappen()
{
int a = 0;
int b = 0;
int c = 0;

zap[ c] = buchst[a]+buchst[b];
for(int i = 1; i < (5776); i++){
c = c+1;
if(b == 75){

a = a+1;
b = 0;
}
else
{
b = b+1;
}

zap[ c] = buchst[a]+buchst[b];



}
System.out.println("fertig");
}
public void zappen2()
{
int a = 0;
int b = 0;
int c = 0;

zap2[ c] = zap[a]+buchst[b];
for(int i = 1; i < (438976); i++){
c = c+1;
if(b == 75){

a = a+1;
b = 0;
}
else
{
b = b+1;
}

zap2[ c] = zap[a]+buchst[b];



}
System.out.println("fertig");
}
public String zapGeben(int nummer)
{
return zap2[nummer];
}
}
Knacker:
public class Knacker
{
public Knacker()
{
}
/* Mit der Methode möchte ich den Inhalt 
des Attributes Inhalt zurückgegeben 
bekommen, ohne den Code wissen zu müssen, 
da diese Methode alle Möglichkeiten durchgehen soll */
public void knacken(Code xCode, Zeichen xZeichen)
{
int a = 0;
/* Hier soll die Methode prüfen was zurückgegeben 
wird, wenn ich für den Code den "zap[a]" einfüge. 
Immer wenn "Code falsch" zurückgegeben wird, 
wird der nächste zap geprüft */
while(xCode.inhaltGeben(xZeichen.zapGeben(a)).equals ("Code falsch")){
a = a+1;
}
/* Sobald nicht mehr "Code falsch" zurückgegeben wird 
soll die Methode "Code.inhaltGeben" benutzt werden, 
um mir den Inhalt von Inhalt wiederzugeben. 
Hier liegt aber das Problem. 
Die Methode "knacken" läuft das Array "zap2" komplett durch, 
obwohl ich zuvor für "Code" eine Zeichenfolge eingegeben habe, 
die im Array enthalten ist */
System.out.println(xCode.inhaltGeben(xZeichen.zapGeben(a)));
}
}
 
Hi,

ich hab zwar keine Lösung für den Problem, aber warum ersetzt du Zeile 54 - 130 nocht durch sowas:?
Java:
buchst = {'', 'a', 'b', .....,  ', '%', '/', '&'};
(Hochkommata statt Anführungsstrichen, da wie schon gesagt wurde ein char-Array besser geeignet währe.)

Gruß javaDeveloper2011
 
Deine Methoden zappen() und zappen2() füllen deine Arrays zap und zap2 mit einzelnen Buchstaben, du brauchst also auch hier kein "String []" zu nutzen, ein "char []" tut es auch.

Deine Methode Code.inhaltGeben ist etwas schwierig. Wäre es nicht sinnvoller, in der Klasse Code 2 Methoden zu schreiben:
Java:
public boolean pruefen(String pruefCode){
      return pruefCode.equals(code);
}
diese Methode prüft nur, ob der Code gültig ist. Wichtig ist, dass du die String-Objekte nicht mit ==, sondern mit string1.equals(string2) vergleichst. Der ==-Operator vergleicht die Identität der Objekte, d.h. ob die Referenzen an die selbe Stelle im Arbeitsspeicher zeigen. Die Methode String.equals() (geerbt von Object) überprüft, ob die Werte der String-Objekte gleich sind, d.h. ob die Zeichenfolgen gleich sind.

die Methode inhaltGeben() sollte entweder den Inhalt oder 'null' zurückgeben. Du könntest auch mit Exceptions arbeiten, aber das ist nicht unbedingt nötig. Mein Vorschlag:
Java:
public String inhaltGeben(String xCode){
     if(xCode.equals(code)){
          return code;
     }
     return null;// wird nur ausgeführt, wenn der Code nicht stimmt
}

Damit könntest du deine Methode knacken() wie folgt ändern:
Java:
public void knacken(Code xCode, Zeichen xZeichen){
     int a = 0;
     while(!xCode.pruefen(xZeichen.zapGeben(a)))
          a++; // Kurzschreibweise für a = a + 1;
     }
     System.out.println(xCode.inhaltGeben(xZeichen.zapGeben(a)));
}

Dein Problem (Fehlerursache) dürfte der String-Vergleich sein. An sonsten musst du mir das Problem noch mal genauer erklären.
 
Zurück