Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108

    problema di "cifratura", CIFRARIO DI VIGENERE

    Dovrei risolvere questo problema...
    vi riporto l'output che dovrei raggiungere...:
    Stringa : fenicottero
    verme : ape
    F + A = F
    E + P = T
    N + E = R
    I + A = I
    C + P = R
    O + E = S
    T + A = T
    T + P = I
    E + E = I
    R + A = R
    O + P = D

    FTRIRSTIIRD

    vi spiego meglio il mio problema dato il codice
    codice:
    public static void main(String[] args) {
    	Scanner in = new Scanner(System.in);
    	System.out.print("Parola --> ");
    	String s = in.nextLine();
    	System.out.print("Verme --> ");
    	String verme = in.nextLine();
    	if(s == s.toUpperCase())
    		s = s.toLowerCase();
    		
    	int pos = 0, pos2 = 0;
    	
    	char [] array = new char[26];
    	int x = 0;
    		
    	for(char c='a';c<='z';c++){
    		array[x] = c;
    		x++;
    	}
    		
    	int z = 0;
    		
    	for(int i=0;i<s.length();i++){
    		for(int j=0;j<26;j++){
    			if(array[j] == s.charAt(i))
    				pos = j;
    			if(z < verme.length()){
    				if(array[j] == verme.charAt(z))
    					pos2 = j;
    			}
    			
    		}
            z++;			
    	pos = pos + pos2 % 26;
    	pos%=26;
    	System.out.println(s.charAt(i) + " + " + array[pos2] + " = " + array[pos]);
    	}	
    }
    mi stampa in questo modo
    f + a = f
    e + p = t
    n + e = r
    i + e = m
    c + e = g
    o + e = s
    t + e = x
    t + e = x
    e + e = i
    r + e = v
    o + e = s
    quindi non riesco a far ruotare i caratteri della parola "ape"

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    potresti dare alle variabili nomi leggermente più significativi di lettere singole dell'alfabeto??anche pos e pos2 cosa rappresentano? questa è per una leggibilità maggiore del codice (da parte di chi sta fuori).

    poi tu devi fare una roba simile

    codice:
    int vermeIndex = 0; 
    int vermeSize = verme.length; 
    int result; 
    for (Char carat : s){
       result = ((int) carat + (int) verme.charAt(vermeIndex) ) % 26; 
       vermeIndex = (vermeIndex + 1) % vermeSize; 
    }
    non l'ho testato, l'ho scritto al momento, vedi se va

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Si scusa hai ragione...ho letto la tua risposta ma non la capisco
    Char sta per char o Character??
    e poi quella s nel for non va bene essendo una stringa...
    forse intendevi questo
    for (int i=0;i<verme.length();i++){
    carat = s.charAt(i);
    ......
    } ??

    ho provato e non va bene in quanto a me serve di stampare la lettera come ho riportato sopra.

    pos indica la posizione del carattere della stringa
    pos2 indica la posizione del carattere del verme

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quello è il ciclo for enanched, guarda un po' come funziona.

    char o character, ora ho mezzo vuoto...comunque carattere (ovviamente in javese).

    Infine perché dici che non lo puoi fare?

    codice:
    for(...){
     
    System.out.println(carat + " + " + verme.charAt[vermeIndex] + " = " + result);
    }
    e se vuoi memorizzare result in un array libero di farlo.
    E' solo un'indicazione, non è la soluzione (ti ripeto non l'ho testato)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Ho provato a modificare il mio codice ed ho inserito la tua indicazione che dovrebbe essere così
    codice:
    int vermeIndex = 0; 
    int vermeSize = verme.length(); 
    int result; 
    char carat = ' ';
    for (int i=0;i<verme.length();i++){
    	carat = s.charAt(i);
            result = ((int) carat + (int) verme.charAt(vermeIndex) ) % 26; 
    	vermeIndex = (vermeIndex + 1) % vermeSize; 
    	System.out.println(carat + " + " + verme.charAt(vermeIndex) + " = " + result);
    }
    e mi stampa in questo modo:
    Parola --> fenicottero
    Verme --> ape
    f + p = 17
    e + e = 5
    n + a = 3

    come mai?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    questa funziona

    codice:
    public class Cifrario {
    	public static void main(String[] args) {
    		String input = "fenicottero";
    		String alfabeto="ABCDEFGHIJKLMNOPQRSTUVWXYZ".toLowerCase();
    		String verme = "ape";
    		
    		StringBuffer buff = new StringBuffer("");
    		int vermeIndex = 0;
    		int temp;
    		for (char carat : input.toCharArray()){
    			temp = (alfabeto.indexOf(carat) + alfabeto.indexOf(verme.charAt((vermeIndex)))) % 26;
    			System.out.println(carat + " + " + verme.charAt(vermeIndex) + " = " + alfabeto.charAt(temp));
    			 buff.append(alfabeto.charAt(temp));
    			 vermeIndex = (vermeIndex + 1) % verme.length();
    		}
    		System.out.println("Result  " + buff.toString());
    		
    	}
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ovviamente ricorda o tutto lower case o tutto uppercase, misti da problemini.

    Infine le stringhe si controllano con equals, non con == (== controlla i riferimenti)

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Ok perfetto ti ringrazio molto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.