2012-02-18 151 views
1

你好,我有这个代码我正在工作,基本上这将是一个游戏,你必须破解一个句子的形式的代码。替换字符串中的所有字符不同的字符

我遇到麻烦的是用代码中的字符替换句子中的字符。

你替换字符代码的一个例子是这样的 关键字老虎 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(...)'语句。这些可以帮助您找出问题所在的位置,然后您可以提出一个更具体和可回答的问题(或者可以自己解决问题)。 – 2012-02-18 04:15:56

+0

你应该在最后一节使用数组:newSentance = newSentence.replace(alpha.charAt()...使它更短,更易于阅读。 – Russell 2012-02-18 04:51:40

+0

for(int i = 0; i <= 25; i ++)newSentence = newSentence.replace(alpha.charAt(i),map.charAt(i));'我不知道你想用你的代码完成什么,我只是看着它,尽管“哇,墙上的代码对你的评价为1000“,但看起来你需要做大量的工作才能展开一个循环 – jmq 2012-02-18 04:57:44

回答

1

看看字符串全部替换为正则表达式。你的作业太多重复。简化它。

+0

我会提出同样的建议,大多数检查字数,字符串中的有效字符,结束标点符号,甚至是字符的替换,都可以用正则表达式来完成,而且代码少得多。 – Tony 2012-02-18 04:21:04

2

apache commons lang library的实用方法replaceChars()“编码”一个字符串 - 这正是你需要的。

这里是你如何使用它的一个例子:

String output = StringUtils.replaceChars(input, 
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "TIGERABCDFHJKLMNOPQSUVWXYZ");