Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] Perchè questo errore?

    Preparare un programma capace di criptare un testo inserito da tastiera secondo il seguente algoritmo: ogni lettera del testo deve essere sostituita dalla lettera che si trova nella stessa posizione nell’alfabeto rovesciato.
    Gli spazi bianchi e gli altri caratteri non alfabetici eventualmente contenuti nel testo da cifrare devono rimanere invariati. Le lettere maiuscole devono rimanere tali dopo la sostituzione, e così pure le lettere minuscole.

    Esempio: la parola CASA sarebbe criptata come XZHZ, la parola casa sarebbe criptata come xzhz, la parola Casa sarebbe criptata come Xzhz.
    // Criptografia

    import javax.swing.*;

    public class Cripto {

    public static void main ( String args [] )
    {
    String alfa[] = { "a","b","c","d","e","f","g","h","i","j","l",
    "m","n","o","p","q","r","s","t","u","x","y","z " };

    String input , // Stringa di input
    output = " "; // Stringa di output

    input =
    JOptionPane.showInputDialog(" Inserisci la frase da criptare ");

    /* Leggo il i caratteri uno x uno li confronto
    maiuscili o minuscoli */

    for ( int i = 0; i <= input.length() ; i++ ){ // inizio for
    for ( int j = 0; j <= 27 ; j++ )// ciclo per controllare i carattri

    if (input.charAt(i).equalsIgnoreCase(alfa[j]) &&
    input.charAt(i).equals(alfa[j])) // controllo

    // stampa la parola criptata
    for ( int x = 27 ; x >= 27 - j; x-- ){
    output += alfa[x];
    }
    else
    // stampa se la lettera e maiscola
    for ( int y = 27 ; y >= 27 - j; y-- )
    output += alfa[y].toUpperCase();

    } // fine for

    JOptionPane.showMessageDialog(null,output,"La frase criptata e': ",
    JOptionPane.INFORMATION_MESSAGE );

    System.exit(0);

    } // fine main
    } // fine classe

    Apparte gli altri errori che ci possono essere il problema è nell'if, il compilatore mi dicebject type required, but char found
    perchè?

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao.. è ovvio che ti dia quell'errore.. infatti:
    con l'nvocazione del metodo charAt( int index ) avrai il carattere dell'indice; cioè:
    input.charAt(i) non fa altro che restituirti il carattere i-esimo della stringa che tu hai chiamato input
    Inoltre hai dichiarato alfa[] come array di stringhe e non di char

    Io modificherei il tuo codice così:

    import javax.swing.*;

    public class Cripto {

    public static void main ( String args [] )
    {
    char alfa[] = { 'a','b','c','d','e','f','g','h','i','j','l',
    'm','n','o','p','q','r','s','t','u','x','y','z' };

    String input , // Stringa di input
    output = " "; // Stringa di output

    input =
    JOptionPane.showInputDialog(" Inserisci la frase da criptare ");

    /* Leggo il i caratteri uno x uno li confronto
    maiuscili o minuscoli */

    for ( int i = 0; i <= input.length() ; i++ ){ // inizio for
    for ( int j = 0; j <= 27 ; j++ )// ciclo per controllare i carattri
    if('a' == 'a')
    if ( ( (input.charAt(i)) == alfa[j] ) && ( input.charAt(i) == alfa[j] ) ) // controllo

    // stampa la parola criptata
    for ( int x = 27 ; x >= 27 - j; x-- ){
    output += alfa[x];
    }
    else
    // stampa se la lettera e maiscola
    for ( int y = 27 ; y >= 27 - j; y-- )
    output += alfa[y];

    } // fine for

    JOptionPane.showMessageDialog(null,output,"La frase criptata e': ",
    JOptionPane.INFORMATION_MESSAGE );

    System.exit(0);

    } // fine main
    }

    Tieni presente che non l'ho provato, ma per sommi capi mi sembra dovrebbe andare... ciaooo
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  3. #3
    Non ho testato il tuo codice ma credo che il problema sia proprio quì
    if (input.charAt(i).equalsIgnoreCase(alfa[j]) &&
    input.charAt(i).equals(alfa[j])) // controllo


    Stai usando equals() che é un metodo per confrontare oggetti.
    String é considerato un oggetto perchè appunto deriva dalla classe String.
    Dal momento in cui tramite string richiami il metodo charAt(int)
    stai dicendo a java di confrontare un char "tipo primitivo" con un array di stringhe, il che non lo puoi fare.
    Siccome vedo che a te serve ignoreCase,
    Puoi risolvere il problema semplicemente così:
    input = "Ciao";// stringa di prova
    // dimensiono un nuovo array di stringhe che deve contenere l'input
    String appo[] = new String[input.length()];

    // lo carico
    for (int i = 0; i<appo.length ; i++)
    {
    appo[i] = input.substring(i);
    }
    for ( int i = 0; i < appo.length ; i++ )
    {
    for ( int j = 0; j < alfa.length ; j++ )
    {
    // faccio il controllo come volevi fare tu
    if (appo[i].equalsIgnoreCase(alfa[j]) &&
    appo[i].equals(alfa[j])) // controllo
    {

    .........
    Controlla bene gli indici perchè potresti incorrere nell'eccezione
    ArrayIndexOutOfBoundsException
    Ciao

  4. #4
    Grazie ai vostri consigli sono riuscito ad abbozzare un programma che funziona ( o quasi ), ma mi rimangono tre piccoli problemi.
    1- scrivo " CaSa " dovrebbe darmi " XzFz "
    2- scrivo " ?casa- " dovrebbe darmi " ?xzfz- "
    3- Poi se scrivo " ciao come stai " gli spazi nell'output sono troppo larghi!!!

    Il codice funzionante è questo

    // Criptografia

    import javax.swing.*;

    public class Cripto {

    public static void main ( String args [] )
    {
    String alfa[] = { "a","b","c","d","e","f","g","h","i","j","k","l ",
    "m","n","o","p","q","r","s","t","u","x","y","z " };

    String input , // Stringa di input
    output = " "; // Stringa di output

    input =
    JOptionPane.showInputDialog(" Inserisci la frase da criptare ");

    // seleziona i caratteri
    for ( int i = 0; i < input.length(); i++ ){ // inizio primo for
    for ( int j = 0; j < alfa.length ; j++ ) { // inizio secondo for

    // controlla gli spazi
    if ( input.substring(i,i+1).equals(" "))
    output+= " ";
    // controlla ed effettua gli scambi
    if ( input.substring(i,i+1).equals(alfa[j]))
    output+= alfa[23-j];

    } // fine secondo for
    } // fine primo for


    JOptionPane.showMessageDialog(null,output,"La frase criptata e': ",
    JOptionPane.INFORMATION_MESSAGE );

    System.exit(0);

    } // fine main
    } // fine classe


    Grazie per il vostro aiuto ci siamo quasi...

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.