在ArrayList赋值中争夺一些字母

时间:2014-09-12 06:09:19

标签: java

此作业涉及对由大写字母组成的字符串的推理。您将实现出现在同一个类中的几个静态方法(未显示)。这是详细信息。 1.第一种方法采用单个字符串参数并返回该字符串的加扰版本。加扰过程从单词的第一个字母开始,从左到右继续。如果两个连续的字母由“A”后跟一个不是“A”的字母组成,那么这两个字母将在结果字符串中交换。一旦交换了两个相邻位置的字母,这两个位置都不会涉及未来的交换。   public static String scrambleWord(String word) 该方法采用给定的单词(空字符串或仅包含大写字母的字符串),并根据上面给出的规则返回包含该单词的加扰版本的字符串。下表显示了几个单词及其加扰版本的示例。 原词加扰后 “TAN”“TNA” “ABRACADABRA”“BARCADABARA” “WHOA”“WHOA” “AARDVARK”“ARADVRAK” “EGGS”“EGGS” “A”“A” “”“

我使用的代码但不起作用

public class ScrambleWord { 

public static void main(String[] args) {
    List<String> strList = new ArrayList<String>();
    strList.add("TAN");
    strList.add("ABRACADABRA");
    strList.add("WHOA");
    strList.add("EGGS");
    strList.add("A");
    strList.add("");
    System.out.prentln(MainMethod.scrambleWordMeth(strList));
}

class MainMethod {
    public static void scrambleWordMeth(List<String> strList) {
        int curr = 0;
        String res = "";
        while (curr < strList.size()) {
            String currentString = strList.get(curr);
            for(int i = 0; i < currentString.length(); i++){
                if (currentString.charAt(i) == 'A' && !(currentString.charAt(i + 1) == 'A')) {
                    res = res + currentString.substring(curr + 1, curr + 2);
                    res = res + 'A';
                    curr = curr + 2;

                }
                else {
                    res = res + currentString.substring(curr, curr + 1);
                    curr++;
                }
            }
            if (curr < strList.size()) {
                res = res + currentString.charAt(curr);
                //res=res + strList.substring(curr);
            }
        }
        return res;      
    }
}
}

1 个答案:

答案 0 :(得分:1)

以下是如何设置方法的模板,以便可以更清晰,更孤立的方式处理算法(注意任务如何为“几种方法”说明)。这将防止已发布代码中的某些问题,例如内部循环中curr(根本不与字符相关)的错误使用。对字母使用数组使得任务本身更合乎逻辑而无需执行切片和连接。

static void scrambleAllWords(List<String> words) {
    // Iterate through the list of word applying the scramble
    // function and replacing the original item with the result.
    for (int i = 0; i < words.size(); i++) {
        String scrambled = scrambleWord(words.get(i));
        words.set(i, scrambled);
    }
}

static String scrambleWord(String word) {
    // Get the letters that make up the word
    char[] letters = word.toCharArray();

    // Perform the algorithm on the letters
    // for (int i = 0; i < ..

    // Create a new string from the now-scrambled letters        
    return new String(letters);
}

算法本身相当简单,可以读作以下伪代码,应用于letters应该是微不足道的,因为它现在是一个明显与其他残差分开的数组。

for i in the range [0, the number of letters in the word - 1)
   if the letter at i is an 'A' and the following letter at i+1 is not an 'A' then
      swap the letter at i with the letter at i+1 and
      skip the next letter by advancing i by 1
         (so that the current-now-next 'A' letter cannot be swapped again)
   otherwise
      do nothing