Verschlüsselungsprobleme =(

  • Themenstarter verzweifelter Anfänger
  • Beginndatum
Status
Nicht offen für weitere Antworten.
V

verzweifelter Anfänger

Gast
Hallo,

ich habe mir überlegt ein kleines und sehr einfaches verschlüsselungsprogramm zu schreiben, aber irgendwie funktioniert es nicht so, wie ich mir das vorgestellt habe. Wenn ich ein Wort eingebe und dann dieses verschlüsseln will, dann gibt er mir einen leeren String aus.
Es wäre sehr nett, wenn ihr mir helfen würdet, den fehler zu beheben

mit freundlichen grüßen

René


Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Code extends Applet
{
  boolean okay;  
  TextField Eingabezeile;
  Button codieren;
  String eingabe = "", ausgabe="";
  
 
  public void init()
  {
    Eingabezeile = new TextField(20);
    codieren = new Button("codieren");
    add(Eingabezeile);
    add(codieren);
    codieren.addActionListener(new MyListener());
  }
 
  class MyListener implements ActionListener
  {
  	public void actionPerformed(ActionEvent e)
  	{
    	Object obj = e.getSource();
    	if (obj instanceof Button)
   		{
   			eingabe = Eingabezeile.getText();   			
    		okay = true;
    		ausgabe = codex(eingabe);
    		repaint();
   		}
  	}
 	}
 
  public String codex(String eingabe)
 	{
  	String ausgabe="";
    char c;
    eingabe.toLowerCase();    

    for(int i =0; i<=eingabe.length(); i++)
  	{
    	c = eingabe.charAt(i);  
   
    	char z=0;
    	switch (c)
  		{
   			case('a'): z='z';
		    break;
		    case('b'): z='y';
		    break;
		    case('c'): z='x';
		    break;
		    case('d'): z='w';
		    break;
		    case('e'): z='v';
		    break;
		    case('f'): z='u';
		    break;
		    case('g'): z='t'; 
		    break;
		    case('h'): z='s';
		    break;
		    case('i'): z='r';
		    break;
		    case('j'): z='q';
		    break;
		    case('k'): z='p';
		    break;
		    case('l'): z='o';
		    break;
		    case('m'): z='n';
		    break;
		    case('n'): z='m';
		    break;
		    case('o'): z='l';
		    break;
		    case('p'): z='k';
		    break;
		    case('q'): z='j';
		    break;
		    case('r'): z='i';
		    break;
		    case('s'): z='h';
		    break;
		    case('t'): z='g';
		    break;
		    case('u'): z='f';
		    break;
		    case('v'): z='e';
		    break;
		    case('w'): z='d';
		    break;
		    case('x'): z='c';
		    break;
		    case('y'): z='b';
		    break;
		    case('z'): z='a';
		    break;		    
		    case(0): z=9;
		    break;   
		    case(1): z=8;
		    break;   
		    case(2): z=7;
		    break;   
		    case(3): z=6;
		    break;   
		    case(4): z=5;
		    break;   
		    case(5): z=4;
		    break;   
		    case(6): z=3;
		    break;   
		    case(7): z=2;
		    break;   
		    case(8): z=1;
		    break;   
		    case(9): z=0;
		    break;		    		       
  		}
  		ausgabe.concat(ausgabe.valueOf(z));  
 		}
  	return ausgabe;    
 	} 
 
  public void paint(Graphics p)
  {
  	p.drawString("Quelle: " + eingabe, 100, 100);
    if(okay)
    p.drawString("Ergebnis: " + ausgabe, 100, 150);
  }
}
 
S

SlaterB

Gast
ausgabe.concat(ausgabe.valueOf(z));
->
ausgabe=ausgabe.concat(ausgabe.valueOf(z));
 
G

Gast

Gast
okay, das habe ich jetzt so abgeändert, aber er gibt mir immer noch einen leeren string aus =(
 
S

SlaterB

Gast
in codex:

String ausgabe="";
->
ausgabe="";

(verwende die Exemplarvariable, erzeuge keine gleichnamige lokale Variable)
 

Evok

Mitglied
Hi
Abgesehen von den Problemchen die zum Nicht-funktionieren dieser Anwendung führen.... würde ich dir empfehlen mal die ASCII Code-Tabelle anzuschauen.
Du wirst merken, dass du auf viel viel einfachere Weise die Buchstaben umdrehen kannst, als du es hier praktizierst.
36 switch-cases sind nicht unbedingt das performanteste....
ich geb dir mal einen kleinen tipp
aus 0 wird 9 durch 9-0 = 9
aus 1 wird 8 durch 9 -1 = 8
....
usw
das gleiche geht auch mit buchstaben
spiel mal ein bisschen rum,

lg
harry
 
R

René

Gast
okay jetzt funktioniert es. ich danke euch allen für die lösung meines
problemes :).

@harry: ja, du hast recht. In diesem fall wäre es ganz sinnvoll, wenn man eine for-schleife anwendet. Vielen Dank für diesen das programm beschleunigenden Ratschlag =)
 
R

René

Gast
Hi, danke nochmal für eure hilfe !! Nun funktioniert das programm, aber da ich dem guten ratschlag von harry folgen wollte, habe ich das ganze ein wenig verkürzt. Mit der Konsequenz, dass beim compilen 23 fehler auftauchen...

Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Code extends Applet
{
  boolean okay;  
  TextField Eingabezeile;
  Button codieren;
  String eingabe = "", ausgabe = "";
  
  
 
  public void init()
  {
    Eingabezeile = new TextField(20);
    codieren = new Button("codieren");
    add(Eingabezeile);
    add(codieren);
    codieren.addActionListener(new MyListener());
  }
 
  class MyListener implements ActionListener
  {
  	public void actionPerformed(ActionEvent e)
  	{
    	Object obj = e.getSource();
    	if (obj instanceof Button)
   		{
   			eingabe = Eingabezeile.getText();
   			codex(eingabe);		
    		okay = true;
    		repaint();
   		}
  	}
 	}
    
  public String codex(String eingabe)
 	{
  	ausgabe="";
    char c;
    eingabe = eingabe.toLowerCase();    

    for(int i =0; i<=eingabe.length(); i++)
  	{
    	c = eingabe.charAt(i);  
    
    	char z=0;
    	switch (c)
  		{
  			for(int i = 0; i<=9; i++)
  			{
	   		case(i): z = 9-i;
			    break;
		    }
		    
		    for(char x = 'a', y = 'z'; x<=y; a++)
		    {		    
			    case(x): z = y-x;
			    break;
			  }		    
  		}
  		ausgabe = ausgabe.concat(ausgabe.valueOf(z));  
 		}
  	return ausgabe;    
 	} 
 
  public void paint(Graphics p)
  {
  	p.drawString("Quelle: " + eingabe, 100, 100);
    
    p.drawString("Ergebnis: " + ausgabe, 100, 150);
  }
}
 

Evok

Mitglied
Also so kann das mal nicht funktionieren
Du kannst nicht ein switch machen, dann ne schleife und in der schleife das case, da überschneiden sich die ebenen, --> geht nicht..
die schleife wird als ganzes ausgeführt, wenn du in der schleife fallunterscheidungen brauchst, dann verwende ein IF

Als kleine hilfestellung wie das angehn könntest.
Du musst für jedes Zeichen im String unterscheiden ob es sich um eine Zahl oder einen Buchstaben handelt
dann kannst du je nach Zeichen bestimmte Operationen ausführen

Die Subtraktionen an sich schauen schon nicht so schlecht aus....

[Edit] war auch blödsinn dabei *g*


lg
harry
 

Yzebär

Bekanntes Mitglied
Code:
       switch (c)
        {
           for(int i = 0; i<=9; i++)
           {
            case(i): z = 9-i;
             break;
          }
         
          for(char x = 'a', y = 'z'; x<=y; a++)
          {         
             case(x): z = y-x;
             break;
           }         
        }

Das hast du dir schön ausgedacht, doch leider hatten die Schöpfer von Java anderes im Sinn... zum einen wollten sie keine dynamischen Werte im "case" zulassen (was ich manchmal auch bedauerlich finde) und zum anderen wollten sie keine Verkettung von switch und Schleifen zulassen (was ich sehr begrüße).

Du mußt also einen anderen Weg finden, der in etwa so aussehen könnte:

Code:
if(c ist eine Zahl)
{
    ...
}
else if( c ist ein Buchstabe)
{
    ...
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben