2015-08-02 2 views
-1

Я пытаюсь сделать программу в Java, которая расшифровывает текст.Расшифровать строку Java

Пример:

Вход: ABKBFA

Выходные: ABBA

Правила:

  • Держите первую букву и последнюю букву

  • перепрыгнуть через некоторые (AZ), Алфавит имеет значения A = 1 B = 2 C = 3 ... Итак, если слово «HZBKRYAFEAAAAJ», оно сначала будет содержать букву H, а потому, что H = 8, она скачет 8 шаги и земля на E. Когда он приземляется на E, слово HE, но оно еще не закончено. E = 5, поэтому 5 шагов для прыжка, и он приземляется на J, и слово будет «HEJ».

Я не пришел, как далеко, чтобы узнать, как решить эту проблему. Сейчас он сохраняет только последнее и первое.

public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     String text = sc.nextLine(); 
     char[] alphabet = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 
     char firstLetter = 0; 
     char lastLetter = (char) (text.length()-1); 

      System.out.println(text.charAt(firstLetter)+""+text.charAt(lastLetter)); 


} 
+0

Подробнее о LOOPs (for; в то время как; do while), то о конкатенации строк. Вам не хватает текста в петле. –

+1

заглавные буквы обрабатываются по-разному ?? – mlwn

+0

Только прописная буква –

ответ

0

Просто пишу сырец функцию, которая делает это:

public static String decrypt(String text) { 
     String returned = ""; 
     //Read first letter 
     char c = text.charAt(0); 
     returned+=c; 
     //Skip value 
     int skip = 0; 

     if(Character.isLowerCase(c)) 
      skip = c - (int)'a' + 1; 
     else 
      skip = c -(int)('A') + 1; 

     if(text.length() >= skip+2) 
      returned += decrypt(text.substring(skip)); 
     else 
      //Return the last character 
      returned += String.valueOf(text.charAt(text.length()-1)); 

     return returned; 
    } 

Выходные:

ABBA 
HEJ 
0

Предполагая, что ваша домашняя работа (https://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions), я не буду отправлять полный ответ, но некоторые советы ,

Таким образом, вы конкатенации один символ в то время

  1. Персонаж в начале строки
  2. следующий символ N позиции после предыдущего символа (если с полукокс, с - «а» + 1, так как 'a' равно 1).
  3. Повторите # 2 до тех пор, пока не достигнете конечного положения (i> = s.length() - 1)
  4. Добавить финальный символ.
0

Здесь вы идете:

import java.util.*; 

public class Decryptor{ 

    public HashMap<String,Integer> map = new HashMap<>(); 

    public static void main(String args[]){ 
     Decryptor d = new Decryptor(); 
     d.setAlphabet(); 
     d.decrypt(); 
    } 

    public void setAlphabet(){  
     int i = 1; 
     for(char alphabet = 'A'; alphabet <= 'Z';alphabet++) { 
      map.put(alphabet+"",i); 
      i++; 
     } 
    } 

    public void decrypt(){ 
     String text = "HZBKRYAFEAAAAJ"; 
     String answer = ""; 
     int pos = 0; 
     while(true){ 
      answer += text.charAt(pos); 
      pos = map.get("" + text.charAt(pos)); 
      if(pos >= text.length){ 
       break; 
      } 
     } 
     System.out.println(answer); 
    } 
} 
0

Предполагая, что только заглавные буквы вводятся как данные:

1. Append the first letter to the result 
2. The jump point is calculated by taking the (current letter) - 'A' + 1 
    'A' - 'A' + 1 = 1 
    'B' - 'A' + 1 = 2 
    etc... 
3. Check if the current position plus the jump is less than the location of the last letter 
    If true, append the letter at the jump point to the result and move to that point 
    If false, you're done 
4. Repeat 2 & 3 until 3 results false 
5. Append the last letter to the result 

Код образца:

public static void main(String[] args) throws Exception { 
    Scanner scanner = new Scanner(System.in); 
    String input = scanner.nextLine(); 

    // Add the first letter 
    StringBuilder sb = new StringBuilder(); 
    sb.append(input.charAt(0)); 

    for (int i = 0; i < input.length() - 2;) { 
     // Find out how far to jump 
     int jump = input.charAt(i) - 'A' + 1; 

     // Check if the jump from the current position is before the last letter 
     if (i + jump < input.length() - 1) { 
      // Append the letter at the jump point 
      sb.append(input.charAt(i + jump)); 

      // Move to the jump point 
      i += jump; 
     } else { 
      // We're done 
      break; 
     } 
    } 

    // Add the last letter 
    sb.append(input.charAt(input.length() - 1)); 

    // Display result 
    System.out.println(sb); 
} 

Результаты:

ABKBFA => ABBA 
HZBKRYAFEAAAAJ => HEJ 
AZZZ => AZZ 
0

Просто для удовольствия :)

public class decrypt { 
    public static void main(String[] args) { 
     if (args.length != 1) { 
      System.out.println("Error! Exiting..."); 
      System.out.println("Usage: java decrypt ENCRYPTED_WORD"); 
      System.out.println("  ENCRYPTED_WORD not found !!"); 
     } else { 
      //Convert the Encrypted text to upper case, in case it was lower case 
      StringBuilder sb = new StringBuilder(args[0]); 
      for (int i = 0; i < sb.length(); i++) { 
       char c = sb.charAt(i); 
       if (Character.isLowerCase(c)) { 
        sb.setCharAt(i, Character.toUpperCase(c)); 
       } 
      } 
      boolean mError = false; 
      int mCounter = 0; 
      StringBuilder Rezult = new StringBuilder(""); 
      Rezult.append(sb.charAt(mCounter)); 
      while (mCounter < sb.length()-1) { 
       try { 
        mCounter += sb.charAt(mCounter) - 'A' + 1; 
        Rezult.append(sb.charAt(mCounter)); 
       } catch (Exception e) { 
        mError = true; 
       } 
      } 
      if (mError) { 
       System.out.println("Your input is incorrect!! Cannot Decrypt"); 
      } else { 
       System.out.println("Decrypted Code is: " + Rezult); 
      } 
     } 
    } 
} 

Compile как:

javac decrypt.java 

Run как:

java decrypt abkbfa 

Примеры:

>>java decrypt 
Error! Exiting... 
Usage: java decrypt ENCRYPTED_WORD 
     ENCRYPTED_WORD not found !! 

>>java decrypt ams 
Your input is incorrect!! Cannot Decrypt 

>>java decrypt abkbfad 
Decrypted Code is: ABBAD 

>>java decrypt HZBKRYAFEAAAAJ 
Decrypted Code is: HEJ 
Смежные вопросы