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.

Hebräische Methode mit Java

Empfohlene Antworten

ich will die sogenannte Hebräische Methode mit Java Programmieren.

aber jetzt bekomme ich immer folgende Fehlermeldung:

HebraeischeMethode.java [38:1] incompatible types // die falsche Zeile ist schwarz Hinterlegt!

found : java.lang.String

required: java.lang.String[]

text = IOTools.readLine("Wort eingeben: ");

^

habe das folgende Programm geschrieben:

import Prog1Tools.IOTools;

/*

* HebraeischeMethode.java

*

* Created on 11. November 2002, 18:36

*/

/**

*

* @author Benjamin Gaus_2

*/

public class HebraeischeMethode

{

/** Creates a new instance of HebraeischeMethode */

public HebraeischeMethode()

{

}

/**

* @param args the command line arguments

*/

public static void main(String[] args)

{

// Deklarationen

int nummer=0;

int i=10;

int zahl;

// Feld deklaration

String[] text = new String[100];

// Ausgabe der Überschrift

System.out.println("Hebräische Methode!");

// Eingabe des Textes

text = IOTools.readLine("Wort eingeben: ");

// Überprüfung wie groß das 2 dimensionale Feld sein soll

do

{

zahl = text.length % i;

i--;

} while(zahl == 0);

// Deklaration des 2 dimensionalen Feldes

String[][] einzelText = new String[zahl][zahl];

// Jeder Buchstabe wird zu seinem Platz im 2 dimensionalen Feld zu gewiesen

for(int k=0; k < zahl; k++)

{

for(int l=0; l < zahl; l++)

{

einzelText[k][l] = text[nummer];

nummer++;

}

}

// Ausgabe der Buchstaben im Feld zahl * zahl!

for(int k=0; k < zahl; k++)

{

for(int l=0; l < zahl; l++)

{

System.out.print(einzelText[k][l]+"\t");

}

System.out.println();

}

}

}

ich habe jetzt schon einiges ausprobiert!

habe aber bis jetzt noch keine Lösung für das kleine Problem gefunden!

Originally posted by DFBL-Benjamin

ich will die sogenannte Hebräische Methode mit Java Programmieren.

aber jetzt bekomme ich immer folgende Fehlermeldung:

habe das folgende Programm geschrieben:

ich habe jetzt schon einiges ausprobiert!

habe aber bis jetzt noch keine Lösung für das kleine Problem gefunden!

Mal wieder meine Worte: Der Compiler sagt dir was falsch ist.

Er will keinen String sondern ein Array von Strings.

Frank

und wie muss ich ein Array von String machen?

Schreibweise?

stehe grad ein bisschen auf´m Schlauch!

Originally posted by DFBL-Benjamin

und wie muss ich ein Array von String machen?

Schreibweise?

stehe grad ein bisschen auf´m Schlauch!

String strArray[] = { "a", "b", "c" };

oder

String strArray[] = new String[20];

usw.

Lernt ihr eigentlich vorher die Programmiersprache bevor ihr damit arbeitet oder wird das mehr so nach trial and error gemacht ?

Frank

wir haben kein guten Lehrer in dem Fach, da muss man alles 5mal nachschauen!

bis man es versteht!

Hi,

was ist die "Hebräische Methode" oder was soll sie machen?

Den Text einfach nur drehen?

Gruß Jaraz

Erklärung so wie ich die haben:

Um eine Nachricht zu verschlüsseln, kann man sie in ein schachbrettartig unterteiles Rechteck horizontal einschreiben und vertikal wieder auslesen. Diese sogenannte "hebräische Methode" soll programmiert werden.

Beispiel zum Verständnis:

Text wäre: hallobenj

Rechteck:

h a l

l o b

e n j

Auslesen sieht dann so aus: hleaonlbj

haste das verstanden?

Originally posted by DFBL-Benjamin

wir haben kein guten Lehrer in dem Fach, da muss man alles 5mal nachschauen!

bis man es versteht!

Ja aber wie man in einer bestimmten Programmiersprache, die er auch noch unterrichtet, eine so elementare Sache erstellt wie ein Array das wird er wohl noch hinbekommen.

Also ich kann da nur noch den Kopf schütteln.

Frank

Originally posted by fmarx2000

Also ich kann da nur noch den Kopf schütteln.

Dann tu es doch bitte!

Selber schon mal vor einer lernwütigen Meute von 20 Leuten gestanden und etwas erklärt, was dieser Meute total neu ist?

Altkluge Sprüche lösen das Problem nämlich nicht.

Hi,

nun habe ich verstanden was du willst.

Du musst also erst einmal deinen String einlesen:

String s = IOTools.readline(); oder so ähnlich, da ich deine IOTools nicht kenne.

Dann würde ich die Stringlänge nehmen und die Wurzel davon auf den nächsten int aufrunden. Dann hast du die Dimension deines mehrdimensionalen Arrays.

Ein String Array ist da allerdings nicht nötig, da ein char Array reicht:

char[][] c = new char[dimension][dimension];

c[x][y] = s.charAt(i);

i kannst du in einer for Schleife durchlaufen.

x und y musst du berechnen.

Ebenso bei der Ausgabe:

StringBuffer ausgabe = new StringBuffer();

ausgabe.append(c[x][y]);

System.out.println(ausgabe);

auch hier musst du x und y wieder berechnen.

(kleiner Tipp, da hilft der modulo Operator)

Das ganze läßt sich also mit 2 for Schleifen erledigen.

Gruß Jaraz

Originally posted by Der Kleine

Dann tu es doch bitte!

Selber schon mal vor einer lernwütigen Meute von 20 Leuten gestanden und etwas erklärt, was dieser Meute total neu ist?

Altkluge Sprüche lösen das Problem nämlich nicht.

Ja ich habe schon des öfteren vor einer "Meute lernwütiger" gestanden.

Während des Studiums habe ich verschiedene Tutorien in Technischer Informatik und verschiedenen anderen Themen gemacht.

Daher weiss ich wie das ist, aber das Zauberwort heisst Vorbereitung , wenn man nämlich nicht weiss von was man blubbert wird man nicht ernst genommen.

Frank

Originally posted by Jaraz

Hi,

nun habe ich verstanden was du willst.

Du musst also erst einmal deinen String einlesen:

String s = IOTools.readline(); oder so ähnlich, da ich deine IOTools nicht kenne.

Dann würde ich die Stringlänge nehmen und die Wurzel davon auf den nächsten int aufrunden. Dann hast du die Dimension deines mehrdimensionalen Arrays.

Gruß Jaraz

Und was machst du wenn es ein Rechtweck sein soll ( a <> b ) , dann sieht es mit der Wurzel dann ja nicht so toll aus ... oder ?

Laut Beschreibung kann es sich um ein schachbrettartig unterteiltes Rechteck handeln.

Frank

Originally posted by fmarx2000

Und was machst du wenn es ein Rechtweck sein soll ( a <> b ) , dann sieht es mit der Wurzel dann ja nicht so toll aus ... oder ?

Laut Beschreibung kann es sich um ein schachbrettartig unterteiltes Rechteck handeln.

Frank

Dann musst man zumindest eine Dimension vorgeben. ;)

Man kann natürlich auch die Rechtecke berechnen und das günstigste nehmen, falls die Stringlänge eine Primzahl ist, wird dann allerdings nichts verschlüsselt. :D

Und fürs entschlüsseln musst du dann ebenfalls eine Dimension mitteilen.

Gruß Jaraz

Originally posted by Jaraz

Dann musst man zumindest eine Dimension vorgeben. ;)

Man kann natürlich auch die Rechtecke berechnen und das günstigste nehmen, falls die Stringlänge eine Primzahl ist, wird dann allerdings nichts verschlüsselt. :D

Und fürs entschlüsseln musst du dann ebenfalls eine Dimension mitteilen.

Gruß Jaraz

Hmmm wenn ich das Array habe kann ich doch die Dimensionen ermitteln, ich muss sie doch nicht mitteilen. Da das Array immmer zweidimensional ist.

Es ist ja nicht zwingend notwenig, daß das Array in der Summe der Felder gleich der Anzahl

der Felder des zu verschlüsselnden Strings ist ... oder ?

Frank

Und was nimmst du dann bei z.B. 12 Stellen, wenn du keinen x oder y Wert vorgibst?

[1][12]

[2][6]

[3][4]

[4][3]

[6][2]

[12][1]

Bei Wurzel 12 aufgerundet hättest du als Dimension halt [4][4].

Gruß Jaraz

Originally posted by Jaraz

Und was nimmst du dann bei z.B. 12 Stellen, wenn du keinen x oder y Wert vorgibst?

[1][12]

[2][6]

[3][4]

[4][3]

[6][2]

[12][1]

Bei Wurzel 12 aufgerundet hättest du als Dimension halt [4][4].

Gruß Jaraz

Ich sagte ja auch wenn ich das Array mal habe und ich möchte dann dekodieren dann brauche ich keine Angaben mehr über eine Dimension, zumindest in Java nicht.

Frank

Originally posted by fmarx2000

Ich sagte ja auch wenn ich das Array mal habe und ich möchte dann dekodieren dann brauche ich keine Angaben mehr über eine Dimension, zumindest in Java nicht.

Frank

Du überträgst ja aber nach dem verschlüsseln den String und nicht das Array. Wenn du das Array senden würdest, wäre die ganze Verschlüsselung sinnlos. Und aus dem String kannst du nicht ohne weiteres das Array neu aufbauen, wenn du nicht wenigstens eine Dimension weißt.

Gruß Jaraz

Originally posted by Jaraz

Du überträgst ja aber nach dem verschlüsseln den String und nicht das Array. Wenn du das Array senden würdest, wäre die ganze Verschlüsselung sinnlos. Und aus dem String kannst du nicht ohne weiteres das Array neu aufbauen, wenn du nicht wenigstens eine Dimension weißt.

Gruß Jaraz

Von verschicken stand da nie was , jedenfalls habe ich das nicht gelesen.

Und warum dann nicht das ganze Array verschicken einfach mit serialize.

Frank

Originally posted by fmarx2000

Von verschicken stand da nie was , jedenfalls habe ich das nicht gelesen.

Und warum dann nicht das ganze Array verschicken einfach mit serialize.

Frank

Tja, warum ist die Banane krumm.

Es geht um die Hebräische Methode. Diese ist anscheinend vor der Exitenz der Computer zum verschlüsseln von Daten benutzt worden. In der Aufgabe geht es nun anscheinend darum die Methode nachzubilden und ich glaube kaum, dass die alten Papyrusrollen das Interface Serializable implementierten. :D

Gruß Jaraz

Originally posted by Jaraz

Tja, warum ist die Banane krumm.

Es geht um die Hebräische Methode. Diese ist anscheinend vor der Exitenz der Computer zum verschlüsseln von Daten benutzt worden. In der Aufgabe geht es nun anscheinend darum die Methode nachzubilden und ich glaube kaum, dass die alten Papyrusrollen das Interface Serializable implementierten. :D

Gruß Jaraz

Dann sollte man es auch nicht auf dem Computer benutzen sondern auf Papyrusrollen.

Aber dann wäre es auch nötig gewesen eine Dimension getrennt zu übertragen, sonst wäre es für den Schurken ja zu einfach gewesen.

Frank

Was ich viel schlimmer finde, ist das solche Lehrer das Lernen einer OO Sprache so angehen, wie sie auch bei C oder VB vorgehen würden.

Anstatt erst einmal auf die objektorientierten Aspekte einzugehen, werden erst mal sämtliche Algorithmen die Sie kennen, in der main Methode abgehandelt. Und dann kommt irgendwann der Satz, so und jetzt kommen wir zu den Objekten. Ich kenne manche Leute, die meinen static wäre Pflicht für Klassenvariablen, nur weil sie es noch nie anders gelernt haben, bzw weil es anders nicht funktioniert.

Aber ich schweife ab, wie wäre es nun wenn sich der Ursprungsposter mal wieder zu Wort meldet. :rolleyes:

Gruß Jaraz

Originally posted by Jaraz

Was ich viel schlimmer finde, ist das solche Lehrer das Lernen einer OO Sprache so angehen, wie sie auch bei C oder VB vorgehen würden.

Anstatt erst einmal auf die objektorientierten Aspekte einzugehen, werden erst mal sämtliche Algorithmen die Sie kennen, in der main Methode abgehandelt. Und dann kommt irgendwann der Satz, so und jetzt kommen wir zu den Objekten. Ich kenne manche Leute, die meinen static wäre Pflicht für Klassenvariablen, nur weil sie es noch nie anders gelernt haben, bzw weil es anders nicht funktioniert.

Aber ich schweife ab, wie wäre es nun wenn sich der Ursprungsposter mal wieder zu Wort meldet. :rolleyes:

Gruß Jaraz

Hmm ich denke es ist teilweise so, dass JAVA als erste Programmiersprach gelehrt wird anstatt z.B. Pascal was mehr Sinn machen würde da man das ganze OO - Zeug erstmal nicht hat und dann auch nicht versaut wird.

Es gibt fast nicht schlimmeres als jemand der eine OO-Sprache wie JAVA oder C++ einsetzt als würde er prozedural Programmieren. Das wird dann leider meistens auch so weitergeführt und die Vorteile von OO werden nie so richtig verstanden oder genutzt.

Verkehrte Welt.

Frank

ich habe die Aufgabe jetzt gelöst.

ich habe euch jetzt noch eine Kleinigkeit der Aufgabenstellung vergessen.

aber diese finde ich wirklich am dümmsten!

nebenbemerkung: Es kann davon ausgegangen werden, dass die Anzahl der Zeichen in einem Text eine Quadratzahl ist. Der Text soll bis maximal 100 Zeichen enthalten dürfen.

Ich finde, den Zusatz voller Quatsch. Ich würde das jetzt nur auf 25 begrenzen, dann würde das auch immer schön mit dem gleichen Wort laufen, aber so wie es in der Aufgabe drin steht, muss es immer z. B. die Quadratzahl sein 1, 2, 3, 4, 5, 6, 7, 8, 9 oder 10! Wer schafft 100 Zeichen einzugeben ohne ein Zeichen zuviel oder zu wenig!

was haltet ihr von der Zusatzaufgabe?

ohne die Nebenbemerkung sieht das Programm dann so aus:

import Prog1Tools.IOTools;

/*

* HebraeischeMethode.java

*

* Created on 11. November 2002, 18:36

*/

/**

*

* @author Benjamin Gaus_2

*/

public class HebraeischeMethode

{

/** Creates a new instance of HebraeischeMethode */

public HebraeischeMethode()

{

}

/**

* @param args the command line arguments

*/

public static void main(String[] args)

{

// Deklarationen

int nummer=0;

int i=10;

int zahl;

// Ausgabe der Überschrift

System.out.println("Hebräische Methode!");

// Eingabe des Textes

String text = IOTools.readLine("Wort eingeben: ");

// Erstellung eines Feldes mit der Laenge des eingegebenen Textes

char [] text_1=new char[text.length()];

// Deklaration des 2 dimensionalen Feldes

char[][] einzelText = new char[5][5];

// Jeder Buchstabe wird zu seinem Platz im 2 dimensionalen Feld zu gewiesen

for(int k=0; k < 5; k++)

{

for(int l=0; l < 5; l++)

{

einzelText[k][l] = text.charAt(nummer);

nummer++;

}

}

// Ausgabe der Buchstaben im Feld zahl * zahl!

System.out.println("Ausgabe des Rechtecks!");

for(int k=0; k < 5; k++)

{

for(int l=0; l < 5; l++)

{

System.out.print(einzelText[k][l]+"\t");

}

System.out.println();

}

// Erstellung der Verschlüsseltes Schrift

System.out.print("Verschluesselter Text: ");

for(int k=0; k < 5; k++)

{

for(int l=0; l < 5; l++)

{

System.out.print(einzelText[l][k]);

}

}

System.out.println();

}// Ende Main-Programm

}// Ende Klasse Hebraeische Methode

Das Programm habe ich jetzt auf 25 Zeichen begrenzt! Das sieht man daran, weil es nur ein Schachbrettartiges Feld von 5x5 gibt!

Das du die Matrix einfach auf 5x5 festsetzt, ist glaube ich nicht Sinn der Sache und liefert dir bei nur 16 Zeichen auch ein falsches Ergebniss.

Laut Aufgabenstellung soll ja alles von 1 bis 10 zum Quadrat gehen.

Gruß Jaraz

hast recht!

aber es gibt 25 Zeichen aus!

5*5= 25!!! :D

bei 16 Zeichen oder weniger gibt er Fehler zurück!

ich finde C++ war einfacher als das Java, da ging das Ruckzuck mit dem Programm, aber bei Java muss man noch alles 25 mal anders schreiben, bis es mal geht!

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.