Java 从文本文件读取,然后为数组赋值

Java 从文本文件读取,然后为数组赋值,java,arrays,file,Java,Arrays,File,我的类项目是提示用户输入一个文件,他们输入的文件名必须正确,一旦文件建立,文件的第一行就是数组的大小。然后,我必须逐行将每个值赋给数组 快速提示**我们还没有了解缓冲读取器,所以我不能使用它。我也不能使用ArrayList,也没有涉及到这一点 问题:如何确保他们输入的文件名正确?到目前为止,我们在课堂上使用了while循环来检查,但我想知道是否有更好的方法。我需要用户输入“investments.txt”,否则我需要一次又一次地提示他们。另外,任何关于改进现有代码的观点都是非常值得赞赏的,我对这

我的类项目是提示用户输入一个文件,他们输入的文件名必须正确,一旦文件建立,文件的第一行就是数组的大小。然后,我必须逐行将每个值赋给数组

快速提示**我们还没有了解缓冲读取器,所以我不能使用它。我也不能使用ArrayList,也没有涉及到这一点

问题:如何确保他们输入的文件名正确?到目前为止,我们在课堂上使用了while循环来检查,但我想知道是否有更好的方法。我需要用户输入“investments.txt”,否则我需要一次又一次地提示他们。另外,任何关于改进现有代码的观点都是非常值得赞赏的,我对这一点非常陌生

迄今为止的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class Prog07_InvestmentManager {

    public static void main(String[] args) {

    Scanner in = new Scanner(System.in);    

    System.out.println("Please enter the file name to import. Example: Investments.txt."); //prompt user
    File file = new File(in.nextLine());

    try {
        Scanner inFile = new Scanner(new FileReader("investments.txt"));
        double min = Integer.MAX_VALUE;
        double max = 0;
        double mean = 0;
        int num = inFile.nextInt();
        inFile.nextLine();

        double line = 0;
        int sum = 0;
        int count = 0;

        while (inFile.hasNextLine()) {

            line=inFile.nextDouble();
            sum+=line;
            count++;

            if(line>max)
                max=line;

            if(line<min)
                min=line;
        }
        mean = (sum/count);
        System.out.println("Max: "+max);
        System.out.println("Min: "+min);
        System.out.println("Mean: "+mean);
        System.out.println();
    } catch (FileNotFoundException e1) {

    }
    if (in.hasNextDouble()) {

    double[] values = new double [(int) in.nextDouble()];

    }

    try {
        Scanner inputFile = new Scanner(file);

        double[] arr = new double[(int) in.nextDouble()];

        for (int i = 0; in.hasNextDouble(); i++) {
            arr[i] = in.nextDouble();
        }

    } catch (FileNotFoundException e) {
        file = new File("investments.txt");
        System.out.print("File not found.\nPlease enter the correct path if needed.");
        file = new File(in.nextLine());                 
        }
    in.close();
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.Scanner;
公共类项目07_投资经理{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
System.out.println(“请输入要导入的文件名。示例:Investments.txt”);//提示用户
File File=新文件(在.nextLine()中);
试一试{
Scanner infle=新扫描仪(新文件阅读器(“investments.txt”);
双最小值=整数最大值;
双最大值=0;
双平均值=0;
int num=infle.nextInt();
infle.nextLine();
双线=0;
整数和=0;
整数计数=0;
while(infle.hasNextLine()){
line=infle.nextDouble();
总和+=行;
计数++;
如果(直线>最大值)
最大值=直线;

if(line第一个建议是使用List接口,而不是一个基本数组

List value=new ArrayList();

1和2可以通过对列表进行排序轻松完成,第一个和最后一个元素分别是最小值和最大值

之后,只需使用foreach循环查找其他值

for (Double element : value) {
   // do math
}

第一个建议是使用列表接口,而不是原始数组

List value=new ArrayList();

1和2可以通过对列表进行排序轻松完成,第一个和最后一个元素分别是最小值和最大值

之后,只需使用foreach循环查找其他值

for (Double element : value) {
   // do math
}

因此,您的代码有几个问题:

  • 读入文件名后,现在应该使用“in”扫描仪。您正试图从System.in开始读取数据,这将导致程序挂起,除非您手动输入所有数据

  • 您从不使用System.in中的字符串覆盖原始文件变量。您甚至不需要以默认值开头。 只需删除
    File File=新文件(“投资”);
    String fileName=in.nextLine();

    然后在提示后添加
    File File=new File(in.nextLine());

  • try/catch之外的while循环也有问题,可以完全删除。同样,您正在尝试从System.in读取所有数据

  • hasNextDouble()和.nextLine()不匹配。这适用于当前设置,因为每个数字都在新行上,但通常应使用相同的数据类型

  • 通常,您可以使用以下命令从文件中读取一个双精度数组:


  • 因此,您的代码有几个问题:

  • 读入文件名后,现在应该使用“in”扫描仪。您正试图从System.in开始读取数据,这将导致程序挂起,除非您手动输入所有数据

  • 您从不使用System.in中的字符串覆盖原始文件变量。您甚至不需要以默认值开头。 只需删除
    File File=新文件(“投资”);
    String fileName=in.nextLine();

    然后在提示后添加
    File File=new File(in.nextLine());

  • try/catch之外的while循环也有问题,可以完全删除。同样,您正在尝试从System.in读取所有数据

  • hasNextDouble()和.nextLine()不匹配。这适用于当前设置,因为每个数字都在新行上,但通常应使用相同的数据类型

  • 通常,您可以使用以下命令从文件中读取一个双精度数组:


  • 可能的重复请将您的问题缩小到您遇到问题的代码的一个特定部分我已将我的问题缩小到一个,我真诚地为您的提问感到抱歉。可能的重复请将您的问题缩小到您遇到问题的代码的一个特定部分大家好,我已经把我的问题缩小到了一个范围,我真诚地为我的提问表示歉意。谢谢,这实际上帮助很大。我的主要问题是获取值并将它们粘贴到数组中。坦率地说,我不理解它是如何工作的,无论如何也不完全理解。我理解“nextLine”一行接一行地处理它,所以我不知道他向我解释的方式是,只要我正确地使用nextLine,我就可以用它为数组赋值,对吗?谢谢,这实际上很有帮助。我的主要问题是获取值并将它们粘贴到数组中。我想坦率地说,我不理解它是如何工作的,无论如何也不完全理解。我理解“nextLine”t一行一行地使用它,所以向我解释的方式是,只要我正确使用nextLine,我就可以使用它为数组赋值,对吗?感谢您的输入!不幸的是,我们还没有在我的类中介绍数组列表,所以我不能使用它。您可以在基本数组中执行相同的操作,只需使用Arrays.sort().foreach循环是ba