java - 使用 Puzzle 并弄清楚如何修复越界错误

标签 java filereader wordsearch

My error Descriptions
我应该从文件中读取一个单词搜索谜题,我的问题是我不断遇到越界错误。我不知道如何根据文件的规范正确设置单词拼图的格式。谜题的格式通常是这样的: 5 5
d e v o l
红色 d PH
q c h z j
p o a a f
v a m m n
qt f o x

这是我到目前为止的工作,我觉得我已经从文件中阅读,但将其转换为单词搜索谜题。特别是尝试不对单词搜索谜题的行和列的规范进行硬编码。

public static char[][] fill(){
    // Created 2 different scanner one for user input and one to read the file

    Scanner file1 = new Scanner(System.in);
    // created a count to add the keywords
    int count = 0;

    //System.out.print("Please enter a keyword to search for.");
    // Asking user to input a valid file name
    System.out.print("Please enter a valid puzzle file name\nYou will be asked for the same file name again later.");
    String wordFile = file1.nextLine();
    FileReader infile;
    boolean validFile = false;
    // Creating a while loop that will keep asking for a valid file name
    while(!validFile) {
        // Using a try and catch to obtain correct file
        try {
            infile = new FileReader(wordFile);
            file1 = new Scanner(infile);
            validFile = true;
        }
        //ask the user to put a valid file name if they are wrong
        catch(IOException e) {
            System.out.println("Not a valid file name, please enter again!");
            wordFile = file1.nextLine();
        }
    }
    String numbers = file1.nextLine();
    String[] fileArray = numbers.trim().split(" ");

    int rows = Integer.parseInt(fileArray[0]);
    int columns = Integer.parseInt(fileArray[1]);

    char[][] fillThemLetters = new char [rows][columns];


    String letters = file1.nextLine().trim().replace(" ", "");

    char [] condensed =  letters.toCharArray(); 

    for (int i = 0; i < condensed.length; i++) {

        for(int row = 0; row < rows; row++){


            for(int column = 0; column < columns; column++)
            {
                char index = condensed[i];
                fillThemLetters[row][column] = index;
                i++;
            }
        }

    }   
    return fillThemLetters;
}

最佳答案

您的索引越界错误是在此处引起的:

for(int column = 0; column < columns; column++)
{
    char index = condensed[i];
    fillThemLetters[row][column] = index;
    i++; // <--------- THIS IS WRONG!!!
}

看到那个i++了吗?您无缘无故地从最外层循环增加计数器。让循环处理它自己的增量,它已经内置了,如下所示:

for (int i = 0; i < condensed.length; i++) {  // <--- You already have i++ here!

解决这个问题后,您将遇到更多问题 - 您的代码没有按照您的想法进行操作,但这些都是单独的问题,应该单独发布。

关于java - 使用 Puzzle 并弄清楚如何修复越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295460/

相关文章:

javascript - Safari 9 XMLHttpRequest Blob 文件下载

javascript - 使用javascript计算大文件的MD5哈希

algorithm - 这个拼字游戏算法中的 "anchors"到底是什么?

android - 在 Android 中仅绘制水平线、垂直线和对角线

java - 如何使用 RESTEasy 访问 HTTP 请求的主体

java - 使用数据库@Entity 类进行 REST 公开?

java - 我的合并排序代码中的合并函数有什么问题?

javascript - 使用 JavaScript 读取多个文件并等待结果

java - 在 Java 中将 1D 字符串数组转换为 2D Char 数组的最佳方法 (Eclipse)

java - Gradle - 同一库的 2 个不同版本