Попытка сделать метод шифрования с помощью операторов if

1
public static String encrypt (String h, int a) throws Exception
{
  h = h.toLowerCase();

  if(h.contains("a"))
  {
     data = data.replace("a", "c");
  }
  if(h.contains("b"))
  {
     data = data.replace("b", "d");
  }
  if(h.contains("c"))
  {
     data = data.replace("c", "e");
  }
  if(h.contains("d"))
  {
     data = data.replace("d", "f");
  }
  if(h.contains("e"))
  {
     data = data.replace("e", "g");
  }
  if(h.contains("f"))
  {
     data = data.replace("f", "h");
  }
  if(h.contains("g"))
  {
     data = data.replace("g", "i");
  }
  if(h.contains("h"))
  {
     data = data.replace("h", "j");
  }
  if(h.contains("i"))
  {
     data = data.replace("i", "k");
  }
  if(h.contains("j"))
  {
     data = data.replace("j", "l");
  }
  if(h.contains("k"))
  {
     data = data.replace("k", "m");
  }
  if(h.contains("l"))
  {
     data = data.replace("l", "n");
  }
  if(h.contains("m"))
  {
     data = data.replace("m", "o");
  }
  if(h.contains("n"))
  {
     data = data.replace("n", "p");
  }
   if(h.contains("o"))
  {
     data = data.replace("o", "q");
  }
   if(h.contains("p"))
  {
     data = data.replace("p", "r");
  }
   if(h.contains("q"))
  {
     data = data.replace("q", "s");
  }
   if(h.contains("r"))
  {
     data = data.replace("r", "t");
  }
   if(h.contains("s"))
  {
     data = data.replace("s", "u");
  }
   if(h.contains("t"))
  {
     data = data.replace("t", "v");
  }
   if(h.contains("u"))
  {
     data = data.replace("u", "w");
  }
   if(h.contains("v"))
  {
     data = data.replace("v", "x");
  }
   if(h.contains("w"))
  {
     data = data.replace("w", "y");
  }
   if(h.contains("x"))
  {
     data = data.replace("x", "z");
  }
   if(h.contains("y"))
  {
     data = data.replace("y", "a");
  }
   if(h.contains("z"))
  {
     data = data.replace("z", "b");
  }

  return h;
}      

Когда я запускаю это, он не заменяет правильные буквы. Я не знаю, как это исправить, и просто искал какую-то помощь.

  • 2
    Это не JavaScript
  • 3
    Замена будет циклической. Как и при замене a на c позже, вы заменяете c на e поэтому исходные данные не будут закодированы должным образом
Показать ещё 5 комментариев
Теги:
caesar-cipher

2 ответа

2

То, как вы шифруете свою строку, делает lettres заменены более одного раза. Если вы действительно хотите использовать оператор "if", вы можете сделать это следующим образом:

static String encrypt (String data)
{
    String returned = new String ("");

    for (char h: data.toCharArray())
    {
        if(h == 'a')
            returned += " a', 'c";
        if(h == 'b')
            returned += "d";
        if(h == 'c')
            returned += "e";
        if(h == 'd')
            returned += "f";
        if(h == 'e')
            returned += "g";
        if(h == 'f')
            returned += "h";
        if(h == 'g')
            returned += "i";
        if(h == 'h')
            returned += "j";
        if(h == 'i')
            returned += "k";
        if(h == 'j')
            returned += "l";
        if(h == 'k')
            returned += "m";
        if(h == 'l')
            returned += "n";
        if(h == 'm')
            returned += "o";
        if(h == 'n')
            returned += "p";
        if(h == 'o')
            returned += "q";
        if(h == 'p')
            returned += "r";
        if(h == 'q')
            returned += "s";
        if(h == 'r')
            returned += "t";
        if(h == 's')
            returned += "u";
        if(h == 't')
            returned += "v";
        if(h == 'u')
            returned += "w";
        if(h == 'v')
            returned += "x";
        if(h == 'w')
            returned += "y";
        if(h == 'x')
            returned += "z";
        if(h == 'y')
            returned += "a";
        if(h == 'z')
            returned += "b";
    }
    return returned;
}

Но лучше использовать хеш-таблицу для такого алгоритма.

  • 1
    если вы собираетесь использовать if , вы должны использовать else if . Таким образом, вы не проверяете весь алфавит, даже если исходная буква «а»
  • 0
    Ты не прав. Если вы используете оператор «else if», будет заменена только одна буква (в данном случае буква выше), и алгоритм остановится. Таким образом, данные не будут зашифрованы.
Показать ещё 2 комментария
2

Здесь более простой способ сделать это конкретное шифрование:

static String encrypt (String data)
{
    String encrypted = new String ("");

    for (char c : data.toCharArray())
    {
        char newC = c+2;
        if(newC > 'z')
            newC -= 26;

        encrypted += newC;
    }

    return encrpyted;
}
  • 0
    это мой предпочтительный метод

Ещё вопросы

Сообщество Overcoder
Наверх
Меню