frizzo28
07-08-2007, 16:16
Ciao a tutti ho scritto in java questo programma che consente di cifrare e decifrare frasi codificate in rot13.FUNZiona perfettamente ma essendo uno dei miei primi programmi object oriented volevo chiedervi se come 'filosofia' orientata agli oggetti ci siamo o se ho fatto i classici errori di chi e' abituato alla programmazione lineare?
import java.lang.*;
import java.io.*;
import java.util.*;
class Codificatore
{
private char co[] = new char[130];
private char decrittati[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
private char rot13[] = {'n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m'};
private int n=0;
private int tipo=0;
//Serve per inserire codifica rot13
public void setRot13(char codice[],int n){co=codice;tipo=1;this.n=n;}
//Questo serve per inserire testo non codificato
public void setSprotetto(char codice[],int n){co=codice;tipo=2;this.n=n;}
//Metodo per convertire se e' stato inserito codice rot13 lo decritta e se e' stato inserito testo
//in chiaro lo cripta in rot13
public void converti()
{
int i,j,tr;
if(tipo==1)
{
//Da rot13 a decrittato
for(i=0;i<n;i++)
{
j=0;
tr=0;
while(j<26&&tr==0){if(co[i]==decrittati[j]){co[i]=rot13[j];tr=1;}j++;}
}
tipo=2;
}
else if(tipo==2)
{
//Da dcrittato a rot13
for(i=0;i<n;i++)
{
j=0;
tr=0;
while(j<26&&tr==0){if(co[i]==rot13[j]){co[i]=decrittati[j];tr=1;}j++;}
}
tipo=1;
}
}
//Questo metodo serve per stampare a video il testo
public void stam()
{
int i;
for(i=0;i<n;i++)
System.out.print(""+co[i]);
}
}
class ProgCodificaore
{
public static void main(String argv[])
{
int n=0,i;
char codice[] = new char[130];
String cletto = new String();
String scelta = new String();
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader Tastiera = new BufferedReader(input);
//Chiedo che codice si vuol inserire
System.out.print("\nProgramma per convertire da rot13 a decrittato e viceversa\nIl codice che sto per inserire e' in:\n1. Rot13 \n2.In chiaro\n Scelta: ");
//Leggo la scelta
try
{
scelta=Tastiera.readLine();
}
catch(IOException e){}
System.out.println("Immetti testo: ");
//Aquisisco testo
try
{
cletto=Tastiera.readLine();
}
catch(IOException e){}
//Salvo in n la lunghezza del testo inserito
n=cletto.length();
//Trasformo la scringa in un array di caratteri cosi' e' piu' comoda da maneggiare
for(i=0;i<n;i++)
{
codice[i] = cletto.charAt(i);
}
//Creo un oggetto appartenente alla classe Codificatore da me creata
Codificatore gg= new Codificatore();
//Qui in base alla scelta dico all'oggetto se sto inserendo testo in chiaro o crittato con rot13
if(scelta.charAt(0)=='1')gg.setRot13(codice,n);
else if(scelta.charAt(0)=='2')gg.setSprotetto(codice,n);
//Chiamo il metodo per convertire e per stampare
gg.converti();
System.out.println("\nConvertito: ");
gg.stam();
//Qui per prova riconverto tutto al formato originario
System.out.println("\nRiconvertito: ");
gg.converti();
gg.stam();
System.out.println("");
}
}
grazie ciao
import java.lang.*;
import java.io.*;
import java.util.*;
class Codificatore
{
private char co[] = new char[130];
private char decrittati[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
private char rot13[] = {'n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m'};
private int n=0;
private int tipo=0;
//Serve per inserire codifica rot13
public void setRot13(char codice[],int n){co=codice;tipo=1;this.n=n;}
//Questo serve per inserire testo non codificato
public void setSprotetto(char codice[],int n){co=codice;tipo=2;this.n=n;}
//Metodo per convertire se e' stato inserito codice rot13 lo decritta e se e' stato inserito testo
//in chiaro lo cripta in rot13
public void converti()
{
int i,j,tr;
if(tipo==1)
{
//Da rot13 a decrittato
for(i=0;i<n;i++)
{
j=0;
tr=0;
while(j<26&&tr==0){if(co[i]==decrittati[j]){co[i]=rot13[j];tr=1;}j++;}
}
tipo=2;
}
else if(tipo==2)
{
//Da dcrittato a rot13
for(i=0;i<n;i++)
{
j=0;
tr=0;
while(j<26&&tr==0){if(co[i]==rot13[j]){co[i]=decrittati[j];tr=1;}j++;}
}
tipo=1;
}
}
//Questo metodo serve per stampare a video il testo
public void stam()
{
int i;
for(i=0;i<n;i++)
System.out.print(""+co[i]);
}
}
class ProgCodificaore
{
public static void main(String argv[])
{
int n=0,i;
char codice[] = new char[130];
String cletto = new String();
String scelta = new String();
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader Tastiera = new BufferedReader(input);
//Chiedo che codice si vuol inserire
System.out.print("\nProgramma per convertire da rot13 a decrittato e viceversa\nIl codice che sto per inserire e' in:\n1. Rot13 \n2.In chiaro\n Scelta: ");
//Leggo la scelta
try
{
scelta=Tastiera.readLine();
}
catch(IOException e){}
System.out.println("Immetti testo: ");
//Aquisisco testo
try
{
cletto=Tastiera.readLine();
}
catch(IOException e){}
//Salvo in n la lunghezza del testo inserito
n=cletto.length();
//Trasformo la scringa in un array di caratteri cosi' e' piu' comoda da maneggiare
for(i=0;i<n;i++)
{
codice[i] = cletto.charAt(i);
}
//Creo un oggetto appartenente alla classe Codificatore da me creata
Codificatore gg= new Codificatore();
//Qui in base alla scelta dico all'oggetto se sto inserendo testo in chiaro o crittato con rot13
if(scelta.charAt(0)=='1')gg.setRot13(codice,n);
else if(scelta.charAt(0)=='2')gg.setSprotetto(codice,n);
//Chiamo il metodo per convertire e per stampare
gg.converti();
System.out.println("\nConvertito: ");
gg.stam();
//Qui per prova riconverto tutto al formato originario
System.out.println("\nRiconvertito: ");
gg.converti();
gg.stam();
System.out.println("");
}
}
grazie ciao