gpt4 book ai didi

java - 从文本文件中读取,然后将值赋给数组

转载 作者:行者123 更新时间:2023-12-02 01:34:14 25 4
gpt4 key购买 nike

我的类(class)项目是提示用户输入一个文件,输入的文件名必须正确,文件建立后,文件的第一行是数组的大小。然后,我必须将每个值逐行分配给数组。

快速说明** 我们还没有了解缓冲阅读器,所以我无法使用它。我也无法使用 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();
}
}

最佳答案

所以您的代码存在几个问题:

  1. 读入文件名后,您应该暂时完成“输入”扫描程序。您正在尝试开始从 System.in 读取数据,这将导致您的程序挂起,除非您手动输入所有数据。

  2. 您永远不会用 System.in 中的字符串覆盖原始文件变量。您甚至不一定需要默认值。只需删除 File file = new File("investments");String fileName = in.nextLine();

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

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

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

  5. 一般来说,您可以使用以下方法从文件中读取 double 组:

   Scanner scanner = new Scanner(file);
double arr = new double[scanner.nextInt()];

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

关于java - 从文本文件中读取,然后将值赋给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55484514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com