此作业涉及对由大写字母组成的字符串的推理。您将实现出现在同一个类中的几个静态方法(未显示)。这是详细信息。 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;
}
}
}
答案 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