Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - Cézarova šifra - pomoc, při dešifrování program hází error

Dobrý den,
Učím se teprve chvíli javu. Chtěl jsem si skusit napsat program který bude trochu pokročileji pracovat s caesarovou šifrou,ale nedopadlo to zrovna nejlépe.
Zašifrovat se mi to daří dobře, ale rozšifrování nejde. Přitom v editoru žádné errory, ani warningy nemám :/.

package šifrovač;
import java.util.Scanner;
/**
 *
 * @author Slu
 */
public class Šifrovač {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "Windows-1250");
        
        System.out.println("Chcete šifrovat / dešifrovat? [1/2]");
            if (Integer.parseInt(sc.nextLine()) == 1)
            {
        System.out.println("Zadejte to co chcete zašifrovat");
        String sentence = sc.nextLine();
        String sifra = "";
        System.out.println("Zadej posun. (v číslech)");
        int sifrkod = Integer.parseInt(sc.nextLine().trim());
        System.out.println("zadej oddělovač znaků");
        String oddel = String.valueOf(sc.nextLine());
        System.out.println("zadal jsi "+sentence+". Šifruji kodem "+"X1"+sifrkod+"abc"+oddel);
        
        for (char c: sentence.toCharArray())
        {
            int i = (int)c;
            sifra += 26-i+97+sifrkod+oddel; //26 je pocetpismen,97 je start A v ASCII.
        }
        sifra = sifra.toUpperCase();
        System.out.println("úspěšně zašifrováno do "+sifra);
            }
            else 
            {
            System.out.println("co chcete rozšifrovat?");
            String zasifrovane = sc.nextLine();
            System.out.println();
            System.out.println("zadej !KOMPLETNÍ! šifrovací kod");
            String sifrokod = sc.nextLine();
            boolean zacateksifr = sifrokod.startsWith("X1");
            boolean stredsifr = sifrokod.contains("abc");
            if ((zacateksifr == true) && (stredsifr == true))
            {
            System.out.println("zašifrovaný text je "+zasifrovane+". Dešifruji klíčem "+sifrokod);
            //vyčištění a nalezení posunu a separátoru
            String separator = sifrokod.substring(sifrokod.lastIndexOf("abc"));
            String posun = sifrokod.replace(separator, "");
            posun = posun.replace("X1", "");
            separator = separator.replace("abc", "");
            System.out.println(posun+"   "+separator);
            //vyčištěno, hurá na dešifraci.
            String desifrovano = "";
            String[] sifrapole = zasifrovane.split(separator);
            for (String i: sifrapole) {
                for (int a = 0; a < sifrapole.length; a++) {
                    int finalniznakcislo = 26+Integer.parseInt(sifrapole[a])-97+Integer.parseInt(posun);
                    char finalniznak = (char)finalniznakcislo;
                    desifrovano += finalniznak;
                    
                            }
              
            }
                System.out.println(desifrovano);
                
            }
            else 
                System.out.println("Tohle NENÍ platný dešifrovací kod.");
                }
            }
            
    }

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
public static String encrypt(String str, int keyLength) { String encrypted = ""; for(int i = 0; i <… poslední
MaSo 18.11.2013 22:07
MaSo
public static String encrypt(String str, int keyLength) 
	{
		String encrypted = "";
		for(int i = 0; i < str.length(); i++) 
		{
			int c = str.charAt(i);
			
			if (Character.isUpperCase(c)) 
			{
				//26 letters of the alphabet so mod by 26
				c = c + (keyLength % 26);
				if (c > 'Z')
				c = c - 26;
			} 
			else if (Character.isLowerCase(c)) 
			{
				c = c + (keyLength % 26);
				if (c > 'z')
				c = c - 26;
			}
			encrypted += (char) c;
		}
	return encrypted;
	}

public static String decrypt(String str, int keyLength) 
	{
		String decrypted = "";
		for(int i = 0; i < str.length(); i++) 
		{
			int c = str.charAt(i);
			if (Character.isUpperCase(c)) 
			{
				c = c - (keyLength % 26);
				if (c < 'A')
				c = c + 26;
			} 
			else if (Character.isLowerCase(c)) 
			{
				c = c - (keyLength % 26);
				if (c < 'a')
				c = c + 26;
			}
			decrypted += (char) c;
		}
		return decrypted;
	}

Zpět do poradny Odpovědět na původní otázku Nahoru