2012-02-18 4 views
1

Здравствуйте, у меня есть этот код, над которым я работаю, и в основном это будет игра, в которой вы должны взломать код в виде предложения.Замена всех символов в строке разными символами

У меня возникают проблемы с заменой символов в предложении символами кода.

Пример кода, заменить символы с это Ключевое слово Tiger TIGERABCDFHJKLMNOPQSUVWXYZ

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

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

Мне нужна помощь с этой частью, прежде чем я смогу продолжить всю оставшуюся игру.

import javax.swing.JOptionPane; 

public class CodeCrackerGame 
/********************************************************* 
* Code Cracker Game 
*********************************************************/ 
{ 
    public static void main(String[] args) 
    { 

    /******************************************** 
    * 1st Player's SENTENCE 
    *******************************************/ 
    String sentence = JOptionPane.showInputDialog("Enter sentence to be" 
     + "encrypted." + "\nThis sentence can be up to 100 characters," 
     + "\nand has a minimum of 7 words."); 

    /*Check if hit cancel or x button*/ 
    if(sentence == null) 
    { 
     JOptionPane.showMessageDialog(null, "No input", "ERROR", 
      JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 
    /*Checks if just hit OK*/ 
    else if(sentence.equals("")) 
    { 
     JOptionPane.showMessageDialog(null, "No Input", "ERROR", 
      JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 

    /*Check if over 100 characters*/ 
    if(sentence.length() > 100) 
    { 
     JOptionPane.showMessageDialog(null, "Input has too many characters", 
      "ERROR", JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 

    int words = 1; 
    int i; 
    /*Counts spaces to find amount of words*/ 
    for (i= 0; i< sentence.length(); i++) 
    { 
     if(sentence.charAt(i)== ' ') 
     { 
     words += 1; 
     } 
    } 
    /*Checks if there are less than 7 words*/ 
    if(words < 7) 
    { 
     JOptionPane.showMessageDialog(null, "Not enough words", 
      "ERROR", JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 

    sentence = sentence.toUpperCase(); 
    /*Check if not alphabetic and if contains illegal punctuation*/ 
    for (i= 0; i< sentence.length(); i++) 
    { 
     if(Character.isLetter(sentence.charAt(i)) == false && 
     sentence.charAt(i)!= '!' && sentence.charAt(i)!= ' ' && 
     sentence.charAt(i)!= ',' && sentence.charAt(i)!= '.' && 
     sentence.charAt(i)!= '?' && sentence.charAt(i)!= '-' && 
     sentence.charAt(i)!= ':' && sentence.charAt(i)!= ';' && 
     sentence.charAt(i)!= '(' && sentence.charAt(i)!= ')' && 
     sentence.charAt(i)!= '[' && sentence.charAt(i)!= ']' && 
     sentence.charAt(i)!= '/' && sentence.charAt(i)!= '\'' && 
     sentence.charAt(i)!= '"') 
     { 
      JOptionPane.showMessageDialog(null, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
       + "! , . ? - : ; () [ ]/' \" are allowed", 
       "ERROR", JOptionPane.ERROR_MESSAGE); 
      System.exit(0); 
     } 
    } 

    /*Checks if string ends with . ! ?*/ 
    char c = sentence.charAt(sentence.length()-1); 
    if(c != '.' && c != '!' && c != '?') 
    { 
     JOptionPane.showMessageDialog(null, "Must end with '.' '!' '?'", 
      "ERROR", JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 
    /*prints out the sentence*/ 
    JOptionPane.showMessageDialog(null, sentence, 
     "Your message in all CAPS", JOptionPane.INFORMATION_MESSAGE); 

    /************************************************** 
    * 1st Player's Keyword 
    **************************************************/ 

    String keyword = JOptionPane.showInputDialog("Enter a keyword" 
     + "\nwith up to 10 characters"); 
    /*Check if hit cancel or x button*/ 
    if(keyword == null) 
    { 
     JOptionPane.showMessageDialog(null, "No input", "ERROR", 
       JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 
    /*Checks if just hit OK*/ 
    else if(keyword.equals("")) 
    { 
     JOptionPane.showMessageDialog(null, "No Input", "ERROR", 
      JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 

    /*Check if keyword is greater than 10 characters*/ 
    if(keyword.length() > 10) 
    { 
     JOptionPane.showMessageDialog(null, "Keyword has too many characters", 
      "ERROR", JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 
    /*Check if keyword is less than 3 characters*/ 
    if(keyword.length() < 3) 
    { 
     JOptionPane.showMessageDialog(null, "Keyword has too little characters", 
      "ERROR", JOptionPane.ERROR_MESSAGE); 
     System.exit(0); 
    } 

    keyword = keyword.toUpperCase(); 
    /*Check if not alphabetic*/ 
    for (i= 0; i< keyword.length(); i++) 
    { 
     if(Character.isLetter(keyword.charAt(i)) == false) 
     { 
      JOptionPane.showMessageDialog(null, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
       +" are allowed", 
       "ERROR", JOptionPane.ERROR_MESSAGE); 
      System.exit(0); 
     } 
    } 
    /*Removes all duplicate letters from the keyword*/ 
    String temp = ""; 
    int position = 0; 
    while(position < keyword.length()) 
    { 
     temp = keyword.substring(position + 1); 
     temp = temp.replaceAll(keyword.charAt(position) + "", ""); 
     keyword = keyword.substring(0, position + 1) + temp; 
     position ++; 
    } 
    /*Adds the keyword to the alphabet creating a new alphabet*/ 
    int x=0; 
    String output =(""); 
    String alpha ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    while(x <alpha.length()) 
    { 
     if(keyword.indexOf(alpha.charAt(x)) == -1) 
     { 
     output=output += alpha.charAt(x); 
     } 
     x++; 
    } 

    String map = (keyword + output); 
    System.out.println(map); 

    String newSentence = sentence; 
    newSentence = newSentence.replace(alpha.charAt(0), map.charAt(0)); 
    newSentence = newSentence.replace(alpha.charAt(1), map.charAt(1)); 
    newSentence = newSentence.replace(alpha.charAt(2), map.charAt(2)); 
    newSentence = newSentence.replace(alpha.charAt(3), map.charAt(3)); 
    newSentence = newSentence.replace(alpha.charAt(4), map.charAt(4)); 
    newSentence = newSentence.replace(alpha.charAt(5), map.charAt(5)); 
    newSentence = newSentence.replace(alpha.charAt(6), map.charAt(6)); 
    newSentence = newSentence.replace(alpha.charAt(7), map.charAt(7)); 
    newSentence = newSentence.replace(alpha.charAt(8), map.charAt(8)); 
    newSentence = newSentence.replace(alpha.charAt(9), map.charAt(9)); 
    newSentence = newSentence.replace(alpha.charAt(10), map.charAt(10)); 
    newSentence = newSentence.replace(alpha.charAt(11), map.charAt(11)); 
    newSentence = newSentence.replace(alpha.charAt(12), map.charAt(12)); 
    newSentence = newSentence.replace(alpha.charAt(13), map.charAt(13)); 
    newSentence = newSentence.replace(alpha.charAt(14), map.charAt(14)); 
    newSentence = newSentence.replace(alpha.charAt(15), map.charAt(15)); 
    newSentence = newSentence.replace(alpha.charAt(16), map.charAt(16)); 
    newSentence = newSentence.replace(alpha.charAt(17), map.charAt(17)); 
    newSentence = newSentence.replace(alpha.charAt(18), map.charAt(18)); 
    newSentence = newSentence.replace(alpha.charAt(19), map.charAt(19)); 
    newSentence = newSentence.replace(alpha.charAt(20), map.charAt(20)); 
    newSentence = newSentence.replace(alpha.charAt(21), map.charAt(21)); 
    newSentence = newSentence.replace(alpha.charAt(22), map.charAt(22)); 
    newSentence = newSentence.replace(alpha.charAt(23), map.charAt(23)); 
    newSentence = newSentence.replace(alpha.charAt(24), map.charAt(24)); 
    newSentence = newSentence.replace(alpha.charAt(25), map.charAt(25)); 

    System.out.println(newSentence); 


    /****************************************** 
    * 2nd players Guess 
    * ****************************************/ 

    String guess = JOptionPane.showInputDialog(null,sentence + "\n" + 
     "Player 2 Enter a guess" 
     + "\form example a=b"); 

} 
+0

Перед отправкой большого количества кода здесь, не отправляя указание где ошибки на самом деле находится, первый, возможно, вы хотите сделать некоторые отладку либо используйте отладчик или несколько инструкций 'System.out.println (...)'. Они могут помочь вам изолировать, где находится проблема, а затем вы можете задать гораздо более конкретный и ответный вопрос (или сможете решить это самостоятельно). –

+0

вы используете массивы в последнем разделе: newSentance = newSentence.replace (alpha.charAt() ... чтобы сделать его короче и легче читать. – Russell

+0

'for (int i = 0; i <= 25; i ++) newSentence = newSentence.replace (alpha.charAt (i), map.charAt (i)); 'Я не знаю, что вы пытаетесь выполнить с помощью своего кода, я просто посмотрел на него, и хотя« woah, wall off code crits you for 1000 ", но похоже, что вы много работали, чтобы развернуть цикл. – jmq

ответ

1

Посмотрите на строку, замените все регулярным выражением. У вас слишком много повторений в вашей домашней работе. Оптимизируйте его.

+0

Я собирался предложить то же самое. Большинство ваших проверок на количество слов, действительные символы в строках, прекращающие знаки препинания , и даже замена символов, может выполняться с помощью регулярных выражений и с гораздо меньшим количеством кода. – Tony

2

У apache commons lang library есть способ утилиты replaceChars(), который «кодирует» строку - это именно то, что вам нужно.

Вот пример того, как вы могли бы использовать:

String output = StringUtils.replaceChars(input, 
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "TIGERABCDFHJKLMNOPQSUVWXYZ"); 
Смежные вопросы