有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从文本文件中选择单个数字?

对于一个项目,我正在创建一个数独解算器。我需要从命令行中调用的文件中获取信息(即,命令行保存包含数独谜题的文本文件的路径)。我的方法是将每一行、每一列和每一个3x3框相加,以验证它是否等于45(1到9相加)。由于每行、每列和每3x3中必须有1-9,如果有重复的数字或缺少一个,则其中至少有一个总数不正确

然而,我遇到的问题是,我不知道如何从文本文件中挑出单个数字。我正在使用

File f = new File(args[0]);

将文件拉入我的项目,但我不知道如何从中访问特定元素。想法

编辑:该文件是一个文件。txt文件,看起来像这样

1 4 5 3 2 7 6 9 8
8 3 9 6 5 4 1 2 7
6 7 2 9 1 8 5 4 3
4 9 6 1 8 5 3 7 2
2 1 8 4 7 3 9 5 6
7 5 3 2 9 6 4 8 1
3 6 7 5 4 2 8 1 9
9 8 4 7 6 1 2 3 5
5 2 1 8 3 9 7 6 4

这样可以访问数字数组中的每个数字吗

int sum = 0;
for(int i=0; i<10; i++){
   sum +=numbers [i] 
}

共 (2) 个答案

  1. # 1 楼答案

    您可以将数字读入二维数组,如下所示:

    Scanner scan = new Scanner(inputFile);
    
    int[][] grid = new int[9][9];
    
    for ( int i = 0; i < 9; i++ ) {
        for ( int j = 0; j < 9; j++ ) {
            if ( ! scanner.hasNextInt() ) {
                 // exit with error since it couldn't read all 81 integers 
            }
            // read next integer into 9x9 grid array
            grid[i][j] = scanner.nextInt();
        }
    }
    

    然后,您应该验证每一行、每一列和相关的3x3子正方形。检查每个值的总和是否为45是不够的(考虑一个满5的网格,它通过了该测试,但显然是不正确的),因此您需要验证每个网格是否包含从1到9的每个不同值

  2. # 2 楼答案

    您可以按如下方式读取文件的各行:

    import java.util.Scanner;
    
    Scanner scan = new Scanner(f);
    while(scan.hasNextLine()) {
        String line = scan.nextLine();
    }
    scan.close();
    

    对于每一行,您需要按分隔符将其拆分。请参见添加到扫描循环的新行:

    while(scan.hasNextLine()) {
        String line = scan.nextLine();
        String[] numbers = line.split(" ");
    }
    

    对于每一行,您都能够将数字提取到字符串数组中

    您可以将数字转换为整数,如下所示:

    String[] numbers = line.split(" ");
    for (String e : numbers) int num = Integer.parseInt(e);
    

    不过,您可能希望将前面的行保存到数据结构中。如果谜题是数独,你可以把数字读入整数矩阵。然后,您可以执行数独计算,以验证谜题是否已解决(如问题所述),并可能打印结果