Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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文件读取2d数组_Java_Arrays_Java.util.scanner - Fatal编程技术网

从Java文件读取2d数组

从Java文件读取2d数组,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,编辑:我已经解决了这个问题。我没有正确读取文件顶部的第二个数字,所以我得到了一个正方形数组。我用扫描仪跳过了第一个数字,解决了这个问题。我将在下面发布更正后的代码。谢谢大家的帮助 我正在尝试学习文件I/o,项目让您读取您创建的文件。该文件以两个数字开始,即班级中的学生人数和要评分的项目数量,然后是一个以姓名开始的大型矩阵,然后是要平均的分数。大概是这样的: 2 3 约翰44.4 55 66.1 丽莎33 44 55 但是,完全更正的方法仍然需要对异常处理进行微调: public static d

编辑:我已经解决了这个问题。我没有正确读取文件顶部的第二个数字,所以我得到了一个正方形数组。我用扫描仪跳过了第一个数字,解决了这个问题。我将在下面发布更正后的代码。谢谢大家的帮助

我正在尝试学习文件I/o,项目让您读取您创建的文件。该文件以两个数字开始,即班级中的学生人数和要评分的项目数量,然后是一个以姓名开始的大型矩阵,然后是要平均的分数。大概是这样的:

2 3

约翰44.4 55 66.1

丽莎33 44 55

但是,完全更正的方法仍然需要对异常处理进行微调:

public static double[][] getArrays(String fileName, int num1, int num2) {
    double[][] twoDArray = new double[num1][num2];
    String[] names = new String[num1];
    try {
        Scanner fileReader = new Scanner(new File(fileName)); //Create a scanner               
        fileReader.nextLine();
         do {
            for (int i = 0; i < num1; i++) {
                names[i] = fileReader.next();
                System.out.println(names[i]);
                for (int j = 0; j < twoDArray[0].length; j++) {
                    twoDArray[i][j] = fileReader.nextDouble();
                }
                fileReader.nextLine();
            }
        } while (fileReader.hasNext());
    } catch (FileNotFoundException | NoSuchElementException ex) { //Catch any exceptions
        System.out.println("Exception caught");
    }
    return twoDArray;
}// end of get2DArray method

你的问题的题目是,

从Java文件读取2d数组

但是我认为你最不想做的事情就是创建一个2D数组,你的代码完全忽略了学生的名字

相反,您应该创建一个学生类,该类有两个字段,一个字符串字段用于保存学生的姓名,一个ArrayList或double[],由您选择,用于保存成绩

然后将从文件中读取一行数据时创建的每个学生对象放入ArrayList或Student[]数组,这也是您的选择

如果使用数组,我猜这是类的需求,那么伪代码可能是:

create File Scanner object, fileScanner
read line, 
create line Scanner with line, 
get both ints studentCount and gradeCount, and store in variables.
dispose of line Scanner
Create Student array
??? possibly read an empty line (if your file representation is accurate). 
for index goes from 0 to < student count
  read line with File Scanner
  create line Scanner with line
  next token goes into a name String
  create 1-D double array
  for other index goes from 0 to < gradeCount
    use line scanner to get doubles and put into one double array
  end for loop
  dispose of line scanner
  create Student object with name and double array, 
  place Student object into Student array
end for loop
dispose of file scanner

通过查看代码,我相信您从未真正将值放入数组,并且由于这样一个事实,即当您打印一个从未关联任何值的初始化数组时,它将自动打印0.0

导致您不在数组中放入任何值的是whilefileReader.hasNextDouble这是在搜索双下一个,但在那里有一个字符串,因此不会发生while循环。供以后调试时参考,添加一个简单的System.out.printlnHit;在您的while循环中,将告诉您是否已到达目标。根据txt文件的结构,我会做一些更改,我将代码放在下面

while (fileReader.hasNext()) {
    for (int i = 0; i < num1FromFile; i++) {
        fileReader.next();
        for (int j = 0; j < num2FromFile; j++) {
            twoDArray[i][j] = fileReader.nextDouble();
        }
    }
}
让我知道这是否适合你

public static double[][] getArrays(String fileName) throws Exception {
    Scanner scanFile = new Scanner(new File(fileName));
    int numNames = scanFile.nextInt();
    int numScores = scanFile.nextInt();
    double[][] scores = new double[numNames][numScores];
    String[] names = new String[numNames];

    for(int i = 0; i < numNames; i++) {
        names[i] = scanFile.next();
        for(int j = 0; j < numScores; j++) {
            scores[i][j] = scanFile.nextDouble();
        }
    }
    scanFile.close();
    return scores;
}

在使用它之前,试着理解它的逻辑。上面的代码可能有输入错误,因为我直接在这里输入。名称被读入数组,但不使用。我相信您对名称不感兴趣,因为您的方法只返回double[]。另外,我假设文件是完美的,没有任何注释等。

您的项目需要使用2d阵列吗?是的,您是对的。这是因为弦的存在。通过调用fileReader.next遍历它@米格:是的,上面说你应该使用2D数组和其他必要的数组。@Sourabh我试过放置文件阅读器。下一步,我仍然得到零。我应该使用不止一个吗?@user3397166我把我的例子放在下面,感谢你的帮助!这当然效果更好,但现在它只给了我一个double,这是我在文件中输入的数字行中倒数第二个double。你知道怎么解决这个问题吗?