+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Cifrario di Cesare

  1. #1
    Luogo
    Veneto
    Post
    6

    Lightbulb Cifrario di Cesare

    Stavo provando a creare un programma per riprodurre il cifrario di cesare, in input prende la stringa e la chiave, in output restituisce la stringa cifrata. Mi stavo chiedendo se esistesse una maniera più semplice di fare il programma di come l'ho fatto io.

    codice:
    import java.util.Scanner;
    
    
    public class CifrarioDiCesare {
    
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		System.out.print("INPUT: ");
    		String frase = in.nextLine();
    		
    		System.out.print("Chiave: ");
    		int chiave = in.nextInt();
    		
    		frase = cifra(frase, chiave);
    		
    		System.out.print("OUTPUT: " + frase);
    		
    	}
    	
    	public static String cifra(String frase, int chiave) {
    		
    		char[] arrayChar = frase.toCharArray();
    		
    		for (int i=0; i<arrayChar.length; i++) {
    			for (int j=0; j<chiave; j++) {
    				
    				if (arrayChar[i]=='A') {
    					arrayChar[i]='B';
    					
    				}
    				else if (arrayChar[i]=='B') {
    					arrayChar[i]='C';
    					
    				}
    				else if (arrayChar[i]=='C') {
    					arrayChar[i]='D';
    					
    				}
    				else if (arrayChar[i]=='D') {
    					arrayChar[i]='E';
    					
    				}
    				else if (arrayChar[i]=='E') {
    					arrayChar[i]='F';
    					
    				}
    				else if (arrayChar[i]=='F') {
    					arrayChar[i]='G';
    					
    				}
    				else if (arrayChar[i]=='G') {
    					arrayChar[i]='H';
    					
    				}
    				else if (arrayChar[i]=='H') {
    					arrayChar[i]='I';
    					
    				}
    				else if (arrayChar[i]=='I') {
    					arrayChar[i]='L';
    					
    				}
    				else if (arrayChar[i]=='L') {
    					arrayChar[i]='M';
    					
    				}
    				else if (arrayChar[i]=='M') {
    					arrayChar[i]='N';
    					
    				}
    				else if (arrayChar[i]=='N') {
    					arrayChar[i]='O';
    					
    				}
    				else if (arrayChar[i]=='O') {
    					arrayChar[i]='P';
    					
    				}
    				else if (arrayChar[i]=='P') {
    					arrayChar[i]='Q';
    					
    				}
    				else if (arrayChar[i]=='Q') {
    					arrayChar[i]='R';
    					
    				}
    				else if (arrayChar[i]=='R') {
    					arrayChar[i]='S';
    					
    				}
    				else if (arrayChar[i]=='S') {
    					arrayChar[i]='T';
    					
    				}
    				else if (arrayChar[i]=='T') {
    					arrayChar[i]='U';
    					
    				}
    				else if (arrayChar[i]=='U') {
    					arrayChar[i]='V';
    					
    				}
    				else if (arrayChar[i]=='V') {
    					arrayChar[i]='Z';
    					
    				}
    				else if (arrayChar[i]=='Z') {
    					arrayChar[i]='A';
    					
    				}
    				
    				
    				
    			}
    		}
    		frase = new String(arrayChar);
    		
    		return frase;
    	}
    
    }
    Esposito Vittorio

  2. #2
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    5,644

  3. #3
    Luogo
    Lazio
    Post
    1,540
    Blogs
    16
    Quote Originariamente inviato da Vittorio Esposito Visualizza il messaggio
    Stavo provando a creare un programma per riprodurre il cifrario di cesare, in input prende la stringa e la chiave, in output restituisce la stringa cifrata. Mi stavo chiedendo se esistesse una maniera più semplice di fare il programma di come l'ho fatto io.
    prova a convertire uno char in un int ... se fai +1 ...
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  4. #4
    Dev-01 non è in linea Scolaretto
    Post
    271
    Ciao.

    fortunatamente l'alfabeto consiste in una serie limitata di caratteri.

    L'osservazione di sspintux rappresenta un ottima riflessione.

    Dovresti sempre tentare di pensare i tuoi algoritmi in maniera più generalizzata possibile.

    Tipicamente puoi identificare un valore costante (il +1 rilevato da sspintux) e renderlo personalizzabile.

    La definizione di una costante di translazione ti consentirebbe di operare facilmente sui valori ASCII prima di riconvertirli in caratteri con l'eventuale eccezione dei casi limite dovuti alla "rotazione" dei valori, ovvero la gestione del "rientro" all'interno della collezione di simboli disponibili a partire dalla prima posizione quando il valore di un carattere sommato alla costante superi il valore ASCII dell'ultimo simbolo disponibile nella raccolta .

    Ad esempio (SingleCharVal = ASCII_VAL + COSTANTE Mod RACCOLTA.Length) o qualcosa di simile.

    In questi termini otterresti un cifrario dinamico.

    PS: Nonostante la premessa di pensare l'algoritmo in maniera generalizza mi sono limitato all'utilizzo dei valori ASCII attenendomi al tuo esempio di codice.
    Ultima modifica di Dev-01; 06-11-2015 13:49 

  5. #5
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    14,318
    Blogs
    5
    Dev .... questo thread è di maggio, abbastanza vecchio ... probabilmente non viene più seguito da chi lo ha creato ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  6. #6
    Dev-01 non è in linea Scolaretto
    Post
    271
    Scusami, hai ragione, stranamente non ho fatto caso alla data. Sai che in genere non capita. Ti chiedo per favore di eliminare i miei commenti se anche tu lo ritieni opportuno.

  7. #7
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    14,318
    Blogs
    5
    No ... No problem
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi