Java 在单词拼凑游戏的最终方法中,从字符串生成器获取返回类型时遇到问题

Java 在单词拼凑游戏的最终方法中,从字符串生成器获取返回类型时遇到问题,java,methods,stringbuilder,return-type,Java,Methods,Stringbuilder,Return Type,我必须做一个单词拼凑器“游戏”,我有我需要使用的所有方法。我仍然需要把代码放在主要方法中,让用户猜测和使用.equals,看看它是否是正确的词。这不是问题。我在我的单词(word)方法上遇到了一个问题。我使用了字符串生成器,不知道如何返回。代码看起来很好,可以编译,但是说有一个错误。有人能帮忙吗?这是我现在的代码 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileRead

我必须做一个单词拼凑器“游戏”,我有我需要使用的所有方法。我仍然需要把代码放在主要方法中,让用户猜测和使用.equals,看看它是否是正确的词。这不是问题。我在我的单词(word)方法上遇到了一个问题。我使用了字符串生成器,不知道如何返回。代码看起来很好,可以编译,但是说有一个错误。有人能帮忙吗?这是我现在的代码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

 /**
 *
 * @author Brian2
 */
 public class Project3 {

/**
 * @param args the command line arguments
 * @throws java.io.IOException
 */
public static void main(String[] args) throws IOException {

    //Shuffle s = new Shuffle();
      //  s.shuffle("hello");

    String[] words = createListOfWords();
    String word = chooseRandomWord(words);
    String scrambledWord = scrambleWord(word);
    System.out.println(scrambledWord);

    /* code for asking userers guess
    *
    *use .equals
    *
    *
    */

}
double[] wordList = new double[65573];

private static String[] createListOfWords() throws FileNotFoundException, IOException {
    BufferedReader in = new BufferedReader(new FileReader("wordlist.txt"));
    String str;

    List<String> list = new ArrayList<String>();
    while ((str = in.readLine()) != null) {
        list.add(str);
    }

    String[] stringArr = list.toArray(new String[0]);

    // test to see if array stored--System.out.println(Arrays.toString(stringArr));
    return stringArr;

}

/**
 *
 * @param words
 * @return
 */
private static String chooseRandomWord(String[] words) {

    int index = new Random().nextInt(words.length);

    String word = words[index];

    return word;
}

private static String scrambleWord(String word) {

    char[] charArray = word.toCharArray();



        List<Character> characters = new ArrayList<>();

        StringBuilder scrambledWord = new StringBuilder(word.length());

            int randPicker = (int) (Math.random() * characters.size());
    StringBuilder append = scrambledWord.append(characters.remove(randPicker));




/*for (int i = charArray.length - 1; i > 0; i--) { 
 int j = ((int)(Math.random())(i + 1));

 double scrambledWord = charArray[i];
 charArray[i] = charArray[j];
 charArray[j] = (char) scrambledWord;
 }*/

return scrambledWord.toString() ;
/*This method should take a word as an argument, and return the 
 same word, except scrambled. In order to scramble a word, convert 
 it to an array of chars, like this:*/
    //char[] charArray = word.toCharArray();

 }

  }
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.Random;
/**
*
*@作者布莱恩2
*/
公共类项目3{
/**
*@param指定命令行参数
*@抛出java.io.IOException
*/
公共静态void main(字符串[]args)引发IOException{
//洗牌s=新洗牌();
//s.shuffle(“你好”);
String[]words=CreateListofWord();
字符串字=选择和多字(字);
字符串加扰字=加扰字(字);
系统输出打印LN(DWORD);
/*询问用户猜测的代码
*
*使用。等于
*
*
*/
}
double[]单词列表=新的double[65573];
私有静态字符串[]CreateListofWord()抛出FileNotFoundException,IOException{
BufferedReader in=新的BufferedReader(新的文件阅读器(“wordlist.txt”);
字符串str;
列表=新的ArrayList();
而((str=in.readLine())!=null){
添加(str);
}
String[]stringArr=list.toArray(新字符串[0]);
//测试是否存储了数组--System.out.println(Arrays.toString(stringArr));
返回stringArr;
}
/**
*
*@param单词
*@返回
*/
私有静态字符串选择器ANDOMWORD(字符串[]个字){
int index=new Random().nextInt(words.length);
字符串字=字[索引];
返回词;
}
专用静态字符串加扰字(字符串字){
char[]charArray=word.toCharArray();
列表字符=新的ArrayList();
StringBuilder扰码DWORD=新的StringBuilder(word.length());
int randPicker=(int)(Math.random()*characters.size());
StringBuilder append=scrambledWord.append(characters.remove(randPicker));
/*对于(inti=charArray.length-1;i>0;i--){
intj=((int)(Math.random())(i+1));
双扰码DWORD=charArray[i];
charArray[i]=charArray[j];
charArray[j]=(char)扰码字;
}*/
返回scrambledWord.toString();
/*此方法应将单词作为参数,并返回
相同的单词,除了加扰。要加扰单词,请转换
将其转换为一个字符数组,如下所示:*/
//char[]charArray=word.toCharArray();
}
}

您从未在
scrambleWord
中的
列表中添加任何字符。我会使用

private static String scrambleWord(String word) {
    List<Character> characters = new ArrayList<>();
    for (char ch : word.toCharArray()) {
        characters.add(ch);
    }
    Collections.shuffle(characters);
    StringBuilder sb = new StringBuilder();
    for (char ch : characters) {
        sb.append(ch);
    }
    return sb.toString();
}
私有静态字符串加扰字(字符串字){
列表字符=新的ArrayList();
for(char ch:word.toCharArray()){
字符。添加(ch);
}
集合。洗牌(字符);
StringBuilder sb=新的StringBuilder();
for(字符:字符){
某人附加(ch);
}
使某人返回字符串();
}

“代码看起来很好,但是生成了一个错误。”它说有什么错误?它说在scrambleWord的主方法中有一个错误,但使用下面的建议解决了它并返回了我需要的内容。如果您指的是
IndexOutOfBoundsException
(我必须通过运行您的代码并创建自己的
wordlist.txt
来重新创建它,因为您既没有提供堆栈跟踪,也没有提供最小的可编译示例),请查看堆栈跟踪。它会准确地告诉您错误所在。在您的情况下,它会清楚地标识您对
.remove(…)的调用
scrambleWord
中,也就是说。请遵循。换句话说,先发布相关信息,然后在研究中投入最少的精力。复制+粘贴,完成家庭作业,没有学到解决问题的技能,另一个肚子饱的吸血鬼。