Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从文本文件中选择单个数字?_Java - Fatal编程技术网

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

Java 如何从文本文件中选择单个数字?,java,Java,对于一个项目,我正在创建一个数独解算器。我需要从命令行中调用的文件中获取信息(即,命令行保存包含数独谜题的文本文件的路径)。我的方法是将每一行、每一列和每一个3x3框相加,以验证它是否等于45(1到9相加)。由于每行、每列和每3x3中必须有1-9,如果有重复的数字或缺少一个,则其中至少有一个总数不正确 然而,我遇到的问题是,我不知道如何从文本文件中挑出单个数字。我正在使用 File f = new File(args[0]); 将文件拉入我的项目,但我不知道如何从中访问特定元素。想法 编辑:该

对于一个项目,我正在创建一个数独解算器。我需要从命令行中调用的文件中获取信息(即,命令行保存包含数独谜题的文本文件的路径)。我的方法是将每一行、每一列和每一个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] 
}
int和=0;

对于(int i=0;i,您可以按如下方式读取文件的各行:

import java.util.Scanner;

Scanner scan = new Scanner(f);
while(scan.hasNextLine()) {
    String line = scan.nextLine();
}
scan.close();
String[] numbers = line.split(" ");
for (String e : numbers) int num = Integer.parseInt(e);
对于每一行,您需要按分隔符将其拆分。请参阅添加到扫描循环的新行:

while(scan.hasNextLine()) {
    String line = scan.nextLine();
    String[] numbers = line.split(" ");
}
对于每一行,您都能够将数字提取到字符串数组中

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

import java.util.Scanner;

Scanner scan = new Scanner(f);
while(scan.hasNextLine()) {
    String line = scan.nextLine();
}
scan.close();
String[] numbers = line.split(" ");
for (String e : numbers) int num = Integer.parseInt(e);

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

您可以将数字读入二维数组,如因此:

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();
    }
}
Scanner scan=新扫描仪(输入文件);
int[][]网格=新int[9][9];
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
如果(!scanner.hasNextInt()){
//退出时出错,因为它无法读取所有81个整数
}
//将下一个整数读入9x9网格阵列
grid[i][j]=scanner.nextInt();
}
}

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

万岁!输入文件中的数独已经解决了!@Paulpro那就别说了,我只需要程序告诉我它是对的;)@ryandroman我只是太傻了。更重要的一点是,您测试所有内容总和为
45
的想法不足以得出正确解决数独问题的结论。考虑一个充满了<代码> 5 < /代码>的网格。它会通过你的测试,但显然不是一个好的数独解决方案。您需要实际检查每个元素是否不同,以及每行、每列和3x3子格中的1-9;对于(int i=0;i<9;i++){for(int j=0;j<9;j++){if(!scanner.hasNextInt()){//由于无法读取所有81个整数而退出}grid[i][j]=scanner.nextInt();}
但我不是Java程序员。我不知道我的语法是否完全正确,或者这是否可以编译,但我希望它能将完整的网格读入9x9数组,这样网格[0][0],网格[0][1]。。是第一行,
grid[1][0],grid[1][1],…
是下一行。如何访问前3行中的前3个数字进行相加,以及如何将每行的第一个数字相加以进行垂直检查?能否举个例子说明如何将前3行中的前3个数字相加(意思是最左边的上部3x3)?不知什么原因,我很难看到这一点。