Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Java , enigma , problem ze zwrotem kodu po odbiciu

Ostatnio zmodyfikowano 2015-01-26 14:43
Autor Wiadomość
bartal0meo
Temat założony przez niniejszego użytkownika
Java , enigma , problem ze zwrotem kodu po odbiciu
» 2015-01-26 14:43:22
Witam ,
Piszę od dłuższego czasu program-enigmę (ok. 3tyg) ale niestety ciągle mam problem z odbiciem zwracanego kodu (nie odbija kodu tak jak powinno ) Proszę o pomoc w znalezieniu błędu jeśli ktoś zauważy gdzie mam błąd. 

W linku poniżej podaję zasadę działania enigmy
http://edu.i-lo.tarnow.pl/inf/hist/006_col/0001.php


KOD:
C/C++
package javaapplication19;



import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class JavaApplication19 {
   
    public static void main( String[] args ) throws FileNotFoundException, IOException {
        Scanner input = new Scanner( System.in );
        Scanner in = new Scanner( System.in );
        int z = 0;
        String[] imie = new String[ 10 ];
        char szyfr = 0;
        PrintWriter w = new PrintWriter( "plik.txt" );
        PrintWriter d = new PrintWriter( "szyfrowani.txt" );
        FileReader fr = null;
        FileReader bz = null;
        FileReader ro = null;
        FileReader ref = null;
        String reflektor = null; String re;
        //  DataOutputStream rotor = new DataOutputStream(new FileOutputStream("plik.txt"));
        ref = new FileReader( "reflektor.txt" );
        BufferedReader refe = new BufferedReader( ref );
        //  PrintWriter scs=new PrintWriter("roto.txt");
        while(( re = refe.readLine() ) != null ) {
            reflektor = re;
        }
        //System.out.print(reflektor);
       
       
        //  scs.close();
        char[] Tablica = new char[ 26 ];
        int k = 0; int i = 0;
        while( k != 26 )
        {
            // if((42<=i && i<=126) ||(210<=i))
            //{
            Tablica[ k ] =( char )(( char ) '\u0061' + k );
            //w.print(Tablica[k]);
            k++;
            // }
            //i++;
        }
        //w.close();
        System.out.print( "Czy chcesz wygenerować nowe rotory: " );
       
        System.out.print( "podaj ilość rotorow: " );
        int r = input.nextInt();
        int[] lrotorow = new int[ r ];
        char[] rotory = new char[ 255 ];
        // PrintWriter rotorw=new  PrintWriter("rotory.txt");
        String[] TablicaRotorow = new String[ r ];
       
        /*  for ( i=0; i < r; i++){
               char[] tablica = Arrays.copyOf(Tablica,Tablica.length);
                      int n= 256;
                     
                    for (int j = 0; j < 256; j++){      
                        int h =  (int) (Math.random() * n);
                             rotory[j] =  tablica[h];
                            tablica[h] = tablica[n - 1]; n--;   
                            rotorw.print(rotory[j]);
                    }
                    rotorw.println();
                }
                rotorw.close();
                */
        ro = new FileReader( "rotory.txt" );
        BufferedReader bro = new BufferedReader( ro );
        String wiersz;
        i = 0;
       
        while(( wiersz = bro.readLine() ) != null ) {
            TablicaRotorow[ i ] = wiersz;
            //  System.out.println(TablicaRotorow[i]);
            i++; }
        //System.out.println(TablicaRotorow[2]);
        for( i = 0; i <= r - 1; i++ )
        {
            System.out.print( "podaj przesunięcie " +( i + 1 ) + " rotora:  " );
            lrotorow[ i ] = input.nextInt();
        }
        int rot[] = Arrays.copyOf( lrotorow, lrotorow.length );
        // System.out.print("podaj ścieżkę pliku do zaszyfrowania lub odszyfrowania:  ");
        // imie =in.nextLine();
        fr = new FileReader( "C:\\k.txt" );
        BufferedReader bfr = new BufferedReader( fr );
        String Linia;
        char linia;
        char pom;
        int f = 0;
        for( i = 0; i <= 2; i++ )
             System.out.println( TablicaRotorow[ i ] );
       
        while(( Linia = bfr.readLine() ) != null ) {
            int dlugosc = Linia.length();
            for( i = 0; i < dlugosc; i++ ) {
                linia = Linia.charAt( i );
                int s;
                for( s = 0; s <= lrotorow.length - 1; s++ ) {
                    int j = 0;
                    do {
                        pom = 0;
                        if(( Tablica[ j ] == linia ) && s == 0 ) {
                            pom = linia;
                            z = rot[ s ] + j + 1;
                            szyfr = TablicaRotorow[ s ].charAt( z );
                        }
                        else if( linia == '\u0020' ) {
                            szyfr = '\u0020';
                        }
                        else if( szyfr == Tablica[ j ] && s != 0 )
                        {
                            pom = szyfr;
                            z = rot[ s ];
                            z += j;
                            if(( z > 26 ) && s != rot.length - 1 ) {
                                z %= 26;
                                rot[ s + 1 ] += 1;
                                rot[ s ] = lrotorow[ s ];
                            }
                            if( s == rot.length - 1 ) {
                                rot[ s ] += 1;
                                z += 1;
                                if( z >= 26 )
                                     z %= 26;
                               
                            }
                            szyfr = TablicaRotorow[ s ].charAt( z );
                        }
                       
                        j++; }
                    while( pom != Tablica[ j - 1 ] );
                   
                } //System.out.print(szyfr);
                //     bezreflektora[f]=bezreflektora[f].su // bezreflektora[f]=bezreflektora[f]+szyfr;bstring(i)+szyfr;
                for( int j = 0; j < 26; j++ ) {
                    if( szyfr == Tablica[ j ] )
                         szyfr = reflektor.charAt( j );
                   
                }
                w.print( szyfr );
                System.out.print( szyfr );
            }
            System.out.println();
            //System.out.println(Linia);
        }
        w.close();
       
       
        rot = Arrays.copyOf( lrotorow, lrotorow.length );
        bz = new FileReader( "plik.txt" );
        BufferedReader bfbz = new BufferedReader( bz ); szyfr = 0; i = 0; int dupa;
        boolean warunek;
        while(( Linia = bfbz.readLine() ) != null ) {
            int dlugosc = Linia.length();
            for( i = 0; i < dlugosc; i++ ) {
                linia = Linia.charAt( i );
                System.out.println( Linia );
                int s;
                for( s = lrotorow.length - 1; s >= 0; s-- ) {
                    int j = 0;
                    warunek = false;
                   
                    do {
                        pom = 0;
                       
                        if(( TablicaRotorow[ s ].charAt( j ) == linia ) && s == rot.length - 1 ) {
                            z = rot[ s ];
                            //     rot[s]-=1;
                            z = j - z - 1;
                            szyfr = Tablica[ z ];
                            if( z <= 0 ) {
                                z = z + 26;
                                rot[ s ] = lrotorow[ s ];
                            }
                            warunek = true;
                        }
                        else if( linia == '\u0020' ) {
                            szyfr = '\u0020';
                            warunek = true; }
                        else if(( szyfr == TablicaRotorow[ s ].charAt( j ) ) && s != rot.length - 1 )
                        {
                           
                            z = rot[ s ];
                            z = j - z;
                            if( z <= 0 ) {
                                z = z + 26;
                                rot[ s + 1 ] -= 1;
                                rot[ s ] = lrotorow[ s ];
                               
                            }
                            if( s == 0 )
                                 z -= 1;
                           
                            szyfr = Tablica[ z ];
                            warunek = true;
                        }
                        pom = szyfr;
                        dupa = j;
                        j++; }
                    while( warunek != true );
                   
                }
                System.out.print( szyfr );
            }
        }
    }
}
P-125563
« 1 »
  Strona 1 z 1