我实现了以下代码,以尝试根据我的变量wordToGuess的排列对ArrayList进行排序,而无需使用Comparator类。这适用于没有重复字母(如“嘶哑”)的字符串。
但是,当我将wordToGuess更改为“ stellar”时,就会出现问题。我确实意识到问题源于indexOutOfBoundExceptionError,但是我已经思考了一整天,似乎无法找到可能的解决方案。
我的主要问题是将整个“ stellar”一词移到我的orderedHint ArrayList中,同时保留两个“ l”。
任何帮助都非常感谢!!如果您对不使用另一个Comparator类就如何对ArrayList进行排序有更好的建议,我肯定会从中学习!期待您的回答! :D
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest {
public static List<Character> hints = new ArrayList<Character>();
public static List<Character> orderedHint = new ArrayList<Character>();
public static String wordToGuess = "hoarse";
public static String word = "";
public static String fullWord = "";
public static void sortHintsArray() {
System.out.println("hints: " + hints);
System.out.println("orderedHint: " + orderedHint);
for(int i = 0;i<hints.size();i++)
{
int index = wordToGuess.indexOf(hints.get(i));
orderedHint.set(index,hints.get(i));
System.out.println();
System.out.printf("%d iteration: \n",i+1);
System.out.println("hints: " + hints);
System.out.println("orderedHint: " + orderedHint);
}
for(int i =0;i<wordToGuess.length();i++)
{
fullWord += orderedHint.get(i);
}
}
public static boolean checkCorrect() {
return fullWord == word;
}
public static void main(String[] args) {
hints.add('e');
hints.add('r');
hints.add('s');
hints.add('a');
hints.add('h');
hints.add('o');
orderedHint.add('e');
orderedHint.add('r');
orderedHint.add('s');
orderedHint.add('a');
orderedHint.add('h');
orderedHint.add('o');
sortHintsArray();
//System.out.println(hints);
System.out.println(fullWord);
}
}
输出:
hints: [e, r, s, a, h, o]
orderedHint: [e, r, s, a, h, o]
1 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [e, r, s, a, h, e]
2 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [e, r, s, r, h, e]
3 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [e, r, s, r, s, e]
4 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [e, r, a, r, s, e]
5 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [h, r, a, r, s, e]
6 iteration:
hints: [e, r, s, a, h, o]
orderedHint: [h, o, a, r, s, e]
hoarse
答案 0 :(得分:0)
该问题主要是由于使用String.indexOf
总是返回第一个出现索引的情况,因此具有重复字符的字符串失败。
int index = wordToGuess.indexOf(hints.get(i));
重要 :我可以确认如果您的hints
没有重复字符,此操作将失败。例如,对于
List<Character> hints = List.of('s','t','e','l','a','r');
但不是
List<Character> hints = List.of('s','t','e','l', 'l', 'a','r');
Soln :您可能想要一直跟踪直到扫描完一个字母所用的索引,然后使用indexOf(int ch, int fromIndex)
或想一想更好的设计。
注意 :另一段困扰我的代码是
fullWord += orderedHint.get(i);
尝试避免在循环内连接字符串,并计划使用StringBuilder
。