Ir ao conteúdo
  • Cadastre-se

Array de caracteres não gravam da forma correta - Java


Posts recomendados

Eu estou fazendo um programa para criptografar de acordo com a Cifra de César, em Java. Eu me deparei com o seguinte problema no código:

 

package projects;

import java.util.Scanner;

public class Projects {

  public static void main(String[] args) {

    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();

    Scanner scanner = new Scanner(System.in);

    String palavraLida = "";

    System.out.println("Digite a palavra que você quer criptografar:");
        palavraLida = scanner.nextLine();

    System.out.println("Digite a chave para o processo (0 - 25)");
    int chaveString = scanner.nextInt();

    char[] palavraGerada = new char[palavraLida.length()];

    int index = 0;

    if(chaveString <= 25 && chaveString >=0){
        for (int i = 0; i < palavraLida.length(); i++) {
            if (palavraLida.toCharArray()[i] == ' ') {
             palavraGerada[i] = '#';   // Se for um espaco, cria uma hashtag na string de saída
            }else{
                //Se não for, checa de acordo com o alfabeto
               for (int j = 0; j < palavraLida.length(); j++) {
                   if (palavraGerada[i] == alphabet[j]) {
                      index = j + chaveString;
                      if(index >= 26){
                          index = index - 26;
                      }
                      palavraGerada[i] = alphabet[index];//Grava na array de saída de acordo com a variável correspondente
                   }
               }                 
            } 
        }
    }else{
        System.out.println("Chave inválida.\n");
    }

      System.out.println(palavraGerada);

}
}

A primeira checagem do loop FOR (que checa se o caractere é um espaço), funciona corretamente). Já, no else, para caracteres que não são um espaço, não funciona corretamente, já que no array de saída não fica gravado o caractere correspondente

Exemplo de execução do programa:

 

caesarcipher.png.a4119b570b5d839c297b2ad6b6d66a1f.png

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Cweiler disse:

 

O pobrema tá aqui... Não é "palavraGerada"...

Eu troquei e acontece um erro semelhante:

 

 for (int j = 0; j < palavraLida.length(); j++) {
                       if (palavraLida.toCharArray()[i] == alphabet[j]) {
                          index = j + chaveString;
                          if(index >= 26){
                              index = index - 26;
                          }
                          palavraGerada[i] = alphabet[index];//Grava na array de saída de acordo com a variável correspondente
                       }
                   } 

erro2.png.744cd433218aa13f0d0ce151fe42a5a9.png

Algumas letras criptografam, outras não...

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Cweiler disse:

Não vejo mais problemas diretamente. Recomendo que faça o debug passo a passo.

O código completo ficou assim:

 


package projects;

import java.util.Scanner;

public class Projects {

      public static void main(String[] args) {
          
        char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        
        Scanner scanner = new Scanner(System.in);
        
        String palavraLida = "";
        
        System.out.println("Digite a palavra que você quer criptografar:");
            palavraLida = scanner.nextLine();
    
        System.out.println("Digite a chave para o processo (0 - 25)");
        int chaveString = scanner.nextInt();

        char[] palavraGerada = new char[palavraLida.length()];
        
        int index = 0;
        
        if(chaveString <= 25 && chaveString >=0){
            for (int i = 0; i < palavraLida.length(); i++) {
                if (palavraLida.toCharArray()[i] == ' ') {
                 palavraGerada[i] = '#';   // Se for um espaco, cria uma hashtag na string de saída
                }else{
                    //Se não for, checa de acordo com o alfabeto
                   for (int j = 0; j < palavraLida.length(); j++) {
                       if (palavraLida.toCharArray()[i] == alphabet[j]) {
                           if (j + chaveString > 25) {
                              palavraGerada[i] = alphabet[(j + chaveString) - 26]; 
                           } else {
                               palavraGerada[i] = alphabet[j + chaveString]; 
                           }
                       }
                   }                 
                } 
            }
        }else{
            System.out.println("Chave inválida.\n");
        }
        
          System.out.println(palavraGerada);
         
    }
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...