Character array does not save correctly

Asked

Viewed 105 times

1

I’m making a program to encrypt according to Caesar’s Cipher in Java. I came across the following problem in code:

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);

    }
}

The first FOR loop check (which checks if the character is a space), works correctly). In Else, for characters that are not a space, it does not work correctly, since the output array does not save the corresponding character

Example of implementation of the programme:

Percebam que os espaços são inseridos corretamente

  • Looking at your code around here, I realized that the first if within the second for where palavraGerada[i] == alphabet[j] the "wordGerada" in its "i" position is always blank, so it will never be the same as its alphabet. It would not be the place to put the palavraLida?

1 answer

4


Amendments:

palavraGerada[i] replaced by palavraLida.toCharArray()[i]

for (int j = 0; j < palavraLida.length(); j++) replaced by for (int j = 0; j < alphabet.length; j++)

Solution:

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 < alphabet.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
                        }
                    }
                }
            }
        } else {
            System.out.println("Chave inválida.\n");
        }

        System.out.println(palavraGerada);
    }
  • It worked, a tiny mistake, haha. Thank you very much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.