String ärgern mich

PutinI

Mitglied
Hallo Leute. Muss mir da was zusmmenbaun wo ich mit Cäserchiffre arbeite. Also ich hab einen key der mir besagt wie es codieren muss. hab das ABC und wenn ich da A eintippe und den key 2 dann muss er mir C zurückgeben.

Einiges hab ich ja schon bewerkstelligt.

Java:
public class Aufgabe3 {

	/**
	 * @param args
	 */
	
	public static String encode(String openText, int key){
		
		String codierung = "ABCDEFGHIJKLMNOPQRSTUVWXY";
		int startPos;
		char momPos;
		int index;
		
		for(startPos = 0; startPos < openText.length();startPos++ ){
			
			momPos = openText.charAt(startPos);
			index = codierung.indexOf(momPos);
			index = index + key; 
			
			
			System.out.print(codierung.charAt(index)  );
		}
		
		
		return openText;
		
		
	}
	
	public static String decode(String secretText, int key){
		
		String codierung = "ABCDEFGHIJKLMNOPQRSTUVWXY";
		int startPos;
		char momPos;
		int index;
		
		for(startPos = 0; startPos < secretText.length();startPos++ ){
			
			momPos = secretText.charAt(startPos);
			index = codierung.indexOf(momPos);
			index = index - key; 
			
			
			System.out.print(codierung.charAt(index)  );
		}
		
		return secretText;
		
		
	}
	
	
	
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Bitte geben sie den text zum chiffreren ein: ");
		
		String openText = sc.next();
		
		System.out.println("Bitte geben sie den key zum chiffreren ein: ");
		
		int key = sc.nextInt();
		
		System.out.println("Wolle sie es encodieren oder decodieren? Bitte e oder d eingeben: ");
		
		char code = In.read();
		String secretText = null;
		
		
			
			
			switch(code) {
			
			case 'e': {
				encode(openText, key);
				break;
			}
			
			case'd':{
				decode(secretText, key);
				break;
				
			}
			
			
		}	
	}

}

Jetzt hab ich das Problem das wenn ich in der Console dann d zum decodieren eingebe mir eine fehlermeldung kommt? ist es wegen String secretText = null; in der main? Hab die zwei methoden zum sncodieren und decodieren machen müssen war halt so vorgegeben. Jetzt das zweite Problem es muss so sein das das ABC weitergehen muss! Das heißt wenn ich ein zB. ein Y hab und der key 3 ist muss er mir dan ein B ausgeben! Wie kann ich das bewerkstelligen? Bitte um hilfe! Blaöge mich damit schon 4 Studne herum.

Mfg
 
ok das mit dem ABC Weiter hab ich glaub ich gelöst mit:


Java:
public static String encode(String openText, int key){
		
		String codierung = "ABCDEFGHIJKLMNOPQRSTUVWXY";
		int startPos;
		char momPos;
		int index;
		
		for(startPos = 0; startPos < openText.length();startPos++ ){
			
			momPos = openText.charAt(startPos);
			index = codierung.indexOf(momPos);
			index = index + key; 
			if (index >=  25){
				index = index - 25;
			}
			
			//System.out.print(index);
			System.out.print(codierung.charAt(index)  );
		}
		
		
		return openText;
		
		
	}
	
	public static String decode(String secretText, int key){
		
		String codierung = "ABCDEFGHIJKLMNOPQRSTUVWXY";
		int startPos;
		char momPos;
		int index;
		
		for(startPos = 0; startPos < secretText.length();startPos++ ){
			
			momPos = secretText.charAt(startPos);
			index = codierung.indexOf(momPos);
			index = index - key; 
			
			if (index >=  25){
				index = index - 25;
			}
			
			
			//System.out.print(index);
			System.out.print(codierung.charAt(index)  );
		}
		
		return secretText;
		
		
	}

Jetzt nur noch wegen dem Fehler beim starten des decoders.
 
Naja haut ja super hin aber wenn ich dann mit dem Index und dem key genau auf position 25 komm bit er mir ein A anstatt einem Z aus!

Naja als was kann ich ihn sonst setzen?

Pk hab ich auch grad gecheckt das es so sein muss!

Java:
public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Bitte geben sie den text zum chiffreren ein: ");
		
		String openText = sc.next();
		
		System.out.println("Bitte geben sie den key zum chiffreren ein: ");
		
		int key = sc.nextInt();
		
		System.out.println("Wolle sie es encodieren oder decodieren? Bitte e oder d eingeben: ");
		
		char code = In.read();
		
		String secretText = openText;
		
			
			
			switch(code) {
			
			case 'e': {
				encode(openText, key);
				break;
			}
			
			case'd':{
				decode(secretText, key);
				break;
				
			}
			
			
		}	
	}
 
Zuletzt bearbeitet:
Jetzt hab ich nur noch das Problem mit dem ABC und das wenn ich zb. X einlese und des mit dem key 2 chiffrieren will müsste ja Z herauskommen. Aber es kommt A. Und das ist ja wegen dem:

Java:
   if (index >=  25){
          index = index - 25;
			}
 
Index kann auch nicht größer als 25 sein. Du musst die Position überprüfen nach dem du sie verschoben hast. Aber zu der Caesar-Verschlüsselung gibt es hier genügend Themen, wo die Lösung besprochen wurde. Über die Forensuche wirst du bestimmt fündig.
 
ja da wird die Position ja überprüft! In dem Index ist ja schon die Position deseingegeben Bustabens + der KEY. Und wenn das über 25 hinausgeht muss er wieder bei 0 weitermachen. Sitz grad voll auf der leitung.
 
Ach endlich mal einer der nicht drauf steht, sondern sich wenigstens hinsetzt ;-)

Modulo ist dein Freund - untersuche mal das Verhalten des folgenden Statements

Java:
index = (index+key)%26;

Empfehlenswert ist, wenn du
codierung.length() anstelle von 26 verwendest
 

Neue Themen


Zurück
Oben