根据@camickr的建议,这里有一个关于我所处的位置以及我所处理的内容的更新。我现在遇到的问题是,因为我必须在结尾处有一个return语句,所以我只能返回ArrayList字母。
每次按下提示按钮时,解决方案位置中只出现一个字符,它是[],但不会显示构成解决方案的实际字母。
public String generateLetterHint(int count, String word) {
String[] answerArray = word.split("");
ArrayList<String> letters = new ArrayList<String>(Arrays.asList(answerArray));
//StringBuilder string = new StringBuilder();
Collections.shuffle(letters);
while (!letters.isEmpty()) {
String letter = letters.remove(0);
System.out.println(letter);
}
return letters.toString();
}
感谢任何帮助!
答案 0 :(得分:3)
将字符串的每个(唯一)字母添加到ArrayList
的一种方法。
然后您可以使用Collections.shuffle(...)
方法随机化字母。
每次&#34; Hint&#34;按下按钮:
现在下一次&#34; Hint&#34;单击按钮,索引0处将显示不同的字母。
当然,每当用户猜到一封正确的字母时,您需要&#34;删除&#34;也来自ArrayList的那封信。
编辑:
显示概念证明的简单示例:
import java.util.*;
public class Main
{
public static void main(String[] args) throws Exception
{
String answer = "answer";
String[] answerArray = answer.split("");
ArrayList<String> letters = new ArrayList<String>(Arrays.asList(answerArray));
Collections.shuffle( letters );
while (!letters.isEmpty())
{
String letter = letters.remove(0);
System.out.println(letter);
}
}
}
在实际代码中,您只需创建一次ArrayList,并在确定&#34;回答&#34;是的。
然后,每当您需要提示时,您只需调用一个方法:
public String getHint(ArrayList letters)
{
return (letters.isEmpty() ? "" : letters.remove(0);
}
如果没有更多提示,这将只返回一个空字符串。虽然更好的解决方案是在提示完成后禁用提示按钮。
答案 1 :(得分:0)
它的工作只有一个答案。您可以修改然后同时使用多个答案。当您将字符串发送到函数时,它会为您提供一个字符串内部唯一的字母。
package com.Stackoverflow;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomlyString {
private static List<Character> selectableLetters; // it store randomly selectable letters
private static boolean isFirst = true;
private static char letterHint(String answer) {
Random rnd = new Random();
// when function starts in first time, split the string letter by letter
if (isFirst) {
selectableLetters = splitString(answer);
}
isFirst = false;
if(!selectableLetters.isEmpty()) {
int hintIndex = rnd.nextInt(selectableLetters.size()); // select a letter randomly
char hint = selectableLetters.get(hintIndex); // put this letter to hint
selectableLetters.remove(hintIndex); // then remove this letter from selectableLetters, this is for don't select the same letter twice
return hint;
} else {
System.out.println("There is no hint!");
return ' ';
}
}
private static List<Character> splitString(String string) {
List<Character> chars = new ArrayList<>();
// split the string to letters and add to chars
for (char c: string.toCharArray()) {
chars.add(c);
}
return chars;
}
public static void main(String[] args) {
String answer = "Monkey";
for(int i=0; i<7; i++) {
System.out.println("Hints: " + letterHint(answer)); // it writes hint to screen
System.out.println("Other letters: " + selectableLetters); // currently selectable letters for hint
}
}
}