开发者社区> 问答> 正文

使用拼图并弄清楚如何解决超出范围的错误

我应该从文件中读取单词搜索难题,我的问题我一直都越界错误。我不知道如何正确地将单词拼图的格式设置为文件的规范。拼图的格式通常是这样的:5 5 devol redph qchzj poaaf vammn qtfox

到目前为止,这是我的工作,我觉得我已经从文件中读取了下来,但是将其转换为单词搜索难题。特别是不要硬编码单词Seaarch Puzzle的行和列的规范。

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;
}

展开
收起
垚tutu 2019-12-12 09:34:15 940 0
1 条回答
写回答
取消 提交回答
  • #include

    您的索引越界错误是由以下原因引起的:

    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!
    
    

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

    2019-12-12 09:34:34
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
面向失败设计 立即下载
美团 crash 监控分析系统优化之路:crash 率从千分位到万分位 立即下载