как написать java метод (если String x = to String y вернуть String z) - PullRequest
0 голосов
/ 05 марта 2020

Здравствуйте, я хочу создать таблицу, которая говорит, что если x=y, вернуть z. Я знаю, что мой нынешний способ сделать это, вероятно, очень неэффективен, но это лучшее, что я мог придумать, поскольку я новичок. Программа представляет собой простую шифровальную программу для изменения алфавита (ie. 'a'='g', 'b'='h'). Я хочу иметь возможность контролировать, какие значения равны чему, а не делать что-то вроде шифра сдвига / цезаря. Спасибо

import java.util.Scanner;
public class main {
   public static String k;

   public static void main(String[] args) {
      TBL1 gg=new TBL1();
      Scanner sc=new Scanner(System.in);
      System.out.println("Enter a Character");
      String chr=sc.nextLine();
      sc.close();

      for(int i=1;i<=chr.length();i++){
          k=TBL1.set2(Character.toString(chr.charAt(i-1)));
          System.out.print(k);
      }
  }
}
public class TBL1 {
    public static String chr;
    public static String set2(String character){
        if(character.equalsIgnoreCase("a")){
            chr="b";
        }else if(character.equalsIgnoreCase("b")){
            chr="c";
        }else if(character.equalsIgnoreCase("c")){
            chr="d";
        }else if(character.equalsIgnoreCase("d")){
            chr="e";
        }else if(character.equalsIgnoreCase("e")){
            chr="f";
        }else if(character.equalsIgnoreCase("f")){
            chr="g";
        }else if(character.equalsIgnoreCase("g")){
            chr="h";
        }else if(character.equalsIgnoreCase("h")){
            chr="i";
        }else if(character.equalsIgnoreCase("i")){
            chr="j";
        }else if(character.equalsIgnoreCase("j")){
            chr="k";
        }else if(character.equalsIgnoreCase("k")){
            chr="l";
        }else if(character.equalsIgnoreCase("l")){
            chr="m";
        }else if(character.equalsIgnoreCase("m")){
            chr="n";
        }else if(character.equalsIgnoreCase("n")){
            chr="o";
        }else if(character.equalsIgnoreCase("o")){
            chr="p";
        }else if(character.equalsIgnoreCase("p")){
            chr="q";
        }else if(character.equalsIgnoreCase("q")){
            chr="r";
        }else if(character.equalsIgnoreCase("r")){
            chr="s";
        }else if(character.equalsIgnoreCase("s")){
            chr="t";
        }else if(character.equalsIgnoreCase("t")){
            chr="u";
        }else if(character.equalsIgnoreCase("u")){
            chr="v";
        }else if(character.equalsIgnoreCase("v")){
            chr="w";
        }else if(character.equalsIgnoreCase("w")){
            chr="x";
        }else if(character.equalsIgnoreCase("x")){
            chr="y";
        }else if(character.equalsIgnoreCase("y")){
            chr="z";
        }else if(character.equalsIgnoreCase("z")){
            chr="a";
        }else if(character.equalsIgnoreCase(" ")){
            chr=" ";
        }

        return chr;
    }
}

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Не используйте такой подход. В будущем вы можете захотеть использовать зашифрованную версию.

Итак, допустим, вы работаете со своей baseString:

String original = "abcdefghijk"

Создайте вторую строку: String coded = "bcdefhijka";, хотя в вашем случае расположение будет другим.

таким образом, вы можете сделать что-то вроде этого:

public static void main(String[] args) {
    String original = "abcdefghijk";
    String coded = "bcdefghijka";

    char c = coded.charAt(original.indexOf('c'));
    System.out.println("c coded = " + c);
}

Конечно, вы можете go дальше и добавить 'if indexOf (char) == -1 вернуть char 'rule

0 голосов
/ 05 марта 2020

для каждого символа нижнего регистра получите значение следующего символа и добавьте его в строковый буфер.

private static char getNextChar(char value) {
    char a = 'a', z = 'z';
    int shiftKey = 1;
    if (Character.isLowerCase(value)){
        int nextValue = value + shiftKey;
        if (nextValue > z)
            nextValue = a + nextValue % z;
        return (char)nextValue;
    }
    return value;
}
0 голосов
/ 05 марта 2020

Очевидно, что вы создаете шифр Цезаря со смещением (ключом) 1. Вы можете сделать это в 5 шагов:

  1. Go (итерация) по всем символам в строке;
  2. Преобразуйте каждый символ в индекс в алфавите (AB C) для вашего шифра;
  3. Выполните сдвиг, добавив k (например, 1 в вашем случае), а затем возьмите модуль с использованием размера алфавита (26 для английского языка sh AB C);
  4. Преобразование обратно в (зашифрованный) символ из индекса;
  5. Добавление символа к строка зашифрованного текста (с использованием StringBuilder).

Для переупорядоченного алфавита вы можете заменить шаги 3 и 4, используя индекс в другом алфавите, просто получите символ на Индекс переупорядоченной строки алфавита:

"reordered ABC".charAt(index);

Теперь несколько вещей:

  • преобразование из символа в индекс можно выполнить, просто вычитая значение символа из 'A' (char - числовое значение c в Java);
  • для расшифровки Обратите внимание, что оператор Java % является , а не оператором модуля, это оператор rest . Создайте метод mod, который выполняет: mod(int i, int n) = ((i % n) + n) % n, чтобы правильно обрабатывать отрицательные значения;
  • для обработки пробелов, просто проверьте пробел и напрямую добавьте его к экземпляру StringBuilder без шифрования / дешифрования ( особые случаи требуют специального кода).
...