Cifra de cesar ( substituicao )

queria uma ajuda nesse programa, tava copiando ele do livro, so que fiz alguma modificacoes, dai eu queria saber de voces, se conseguem identificar o erro…

pq eu num entendi o que ta errado ai…[code]

public class Cifracesar {

public static final int tamanho= 26;
public static final char[] alfabeto = {'A', 'B', 'C', 'D', 'E','F','G','H','I','J','K','L','M','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
protected char[] criptografar = new char[tamanho];

public Cifracesar(){//criptografando
    for(int i =0; i<=tamanho;i++){
        criptografar[i]= alfabeto[(i+3) % tamanho];
    }
}

private String criptografar(String lala) {
    char[] mess = lala.toCharArray();
    for(int i = 0; i<mess.length;i++)
        if(Character.isUpperCase(mess[i]))
            mess[i]=criptografar[mess[i] - 'A'];
    return new String(mess);
}

public static void main(String[] args){
Cifracesar cifra = new Cifracesar();
System.out.println("Criptografando = "+ new String(cifra.criptografar));
String lala = “doido”;
lala = cifra.criptografar(lala);
System.out.println(lala);
}
}

Os Erros que aparecem…
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 25
at Cifracesar.(Cifracesar.java:9)
at Cifracesar.main(Cifracesar.java:21)
Java Result: 1
[/code]

Aproveitando alguem tem o algoritmo de transposicao ou um programa modelo pra me arrumar ai??

posta o erro que dá

esse for aki vai dar erro:

for(int i =0; i<=tamanho;i++){

pq ele começa do 0 e vai até 26 certo, ou seja, ele anda 27 posições…veja ae!

coloque <tamanho e nao <= :smiley:

eu ja tinha tirado ele, ainda da o msmo erro…rsrs

Coloque o StackTrace.

nao entendo, como assim o printstrack trace…

Nosso alfabeto possui a letra ‘N’, entre as letras ‘M’ e ‘O’.

brigado man, mas vc tem alguma ideia do trem num funcionar…??

Ainda é o problema do “Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 25”? Mudando o “i<=tamanho” para “i<tamanho” como o pessoal sugeriu e colocando o char ‘N’, que foi esquecido, no array alfabeto. A execeção não deveria acontecer mais.

esse erro eh q ele está ultrapassando o tamanho do array…q linha mostra agora?

rapz…agora foi, so tem um problema…ele ta mostrando a palavra original e nao a criptografada…rsrs

Você colocou uma condição para criptografar apenas letras maiúsculas, porém passou a palavra “doido”, que só possui letras minúsculas, para ser criptografada.

private String criptografar(String lala) { char[] mess = lala.toCharArray(); for(int i = 0; i<mess.length;i++) if(Character.isUpperCase(mess[i])) // O caractere só é criptografado se for maiúsculo. mess[i]=criptografar[mess[i] - 'A']; return new String(mess); }

oh eric brigadao, axei q tava fazndo alguma coisa errado, mas tipo, como faco pra alterar isso, fazer ele ler tanto palavras em caixa alta como baixa??

obrigado

aproveitando o topico, tava tentano fazer uma cifra de transposicao…

oh programa ta assim atualmente, alguem poderia me dar uma ajuda, quanto a comparar as letras, pq segundo a teoria as letras vao determinar a ordem, seguindo a ordem alfabetica…

tipo se tiver zebra como palavra chave…a coluna que comecar com a vogal mais proxima de “a” vai ser a primeira ser impressa…

import javax.swing.JTextField;

public class Transposicao extends javax.swing.JFrame {
    private String[] partes;

    public Transposicao() {
        initComponents();
        }

    private void embaralhar(JTextField msgm, JTextField chave) {
       String palavrachave = chave.getText();
       String mensagem = msgm.getText();
       int x = mensagem.length()%palavrachave.length();
       for(int w = 0; w<mensagem.length();w++){
            String vogal = mensagem;
           if(vogal == null){
            for(int k =0; k<x;k++){
             mensagem = (String.format ("%c", 'a' + k));
        }
       }}
       for(int i = 0;i<palavrachave.length();i++)
         partes[i] = palavrachave.substring((palavrachave.length()*i), (palavrachave.length()*(i+1)-1));
       }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea2 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        chave = new javax.swing.JTextField();
        msgm = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTextArea3 = new javax.swing.JTextArea();
        sair = new javax.swing.JButton();

        jTextArea2.setColumns(20);
        jTextArea2.setRows(5);
        jScrollPane2.setViewportView(jTextArea2);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Criptografar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        chave.setText("Digite a palavra chave");

        msgm.setText("Digite a mensagem");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jTextArea3.setColumns(20);
        jTextArea3.setRows(5);
        jScrollPane3.setViewportView(jTextArea3);

        sair.setText("Sair");
        sair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sairActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane1)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, chave)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, msgm, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 244, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 172, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                        .add(org.jdesktop.layout.GroupLayout.LEADING, sair, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(org.jdesktop.layout.GroupLayout.LEADING, jButton1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(31, 31, 31)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(chave, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jButton1))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(msgm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(sair))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String mensagem = msgm.getText();
        String palavrachave = chave.getText();
        embaralhar(msgm,chave);
    }                                        

    private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
        System.exit(0);
    }                                    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Transposicao().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextField chave;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextArea jTextArea2;
    private javax.swing.JTextArea jTextArea3;
    private javax.swing.JTextField msgm;
    private javax.swing.JButton sair;
    // End of variables declaration                   

}

Agradeco quem puder me ajuda…