java 为什么我的扫描仪需要很长时间才能将输入转换为2D字符数组?

jhkqcmku  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(80)

扫描器到2D char数组的时间太长。

嗨!由于一些未知的原因,我的代码需要很长时间,我唯一的猜测是扫描仪是缓慢的,但我不能逃避它,因为我需要使用它。seaCard的大小可以是从1 * 1到10000 * 10000的任何值。cpu的时间限制是8秒,这应该是足够的时间来执行这一点。整个作业是计算网格中的岛屿,但我甚至不能及时读取数据。
输入是这样的Map

~~~~~
~@@~~
@~~~~.

我的代码是这样的。

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int rows = input.nextInt();
        int cols = input.nextInt();
        input.nextLine();
        
        char[][] seaCard = new char[rows][cols];

        // making the map
        for(int i = 0; i < rows; i++){
            String thisRow = input.nextLine();
            for(int j = 0; j < cols; j++){
                seaCard[i][j] = thisRow.charAt(j);
            }
        }
        input.close();

我尝试过将2D数组改为1D字符串数组,但变化不大,我还尝试过使用next()代替nextLine()。
我希望代码运行平稳,并且对于rows = 10000和cols = 10000,字符串输入为10000个长度为10000的字符串行,所需时间不超过6秒。
然而,它只是dosent完成,我唯一的想法是,因为我使用2的循环,我得到了n^2的时间复杂度,但我觉得这仍然不应该使它需要这么长的时间。

wlp8pajw

wlp8pajw1#

此版本从文件中获取输入。第一行应该是行数。不需要从控制台输入任何内容。

public static void main(String[] args) {
    try (Scanner fromFile = new Scanner(new File("C:/yourFilename.txt"))) {
        int rows = fromFile.nextInt(); // read the rows from the file.
        fromFile.nextLine();  // remove EOL from the input buffer
        char[][] seaCard = new char[rows][];
        for (int r = 0; r < rows; r++) {
            seaCard[r] = fromFile.nextLine().toCharArray();
        }
        System.out.println("Done!");
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

相关问题