java - Java:使用文本文件创建数据集
问题描述
我正在尝试制作一个程序来获取不同类型的美国硬币的总数,并将它们的值加起来。硬币信息来自一个txt文件。第一行是一个整数,表示数据集的数量。每个数据集都是一行,13 个整数由一个空格分隔。每个整数代表硬币或钞票的数量。首先是便士,然后是镍币,一直到百元钞票。
我迷失在我想将数据读入程序然后做数学和总计的地方。我想我需要为每个数据集使用 arraylists,但到目前为止,我能弄清楚的是如何将整个 txt 文件(在第一个 int 之后)加载到单个数组列表中,而不是一组等于数据集的数量(每个文件 5 个)。我是 java 和一般编程的新手,所以任何帮助表示赞赏。
我想一旦我可以加载这些值,我就可以很容易地开始添加它们,但我现在很迷茫。
这是txt文件显示的内容:
5
4 0 2 3 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10 11 12 13
4 0 2 3 10 10 2 1 2 1 10 1 100
10 10 10 10 5 5 5 5 2 2 2 2 1
到目前为止,这是我的代码:
import java.io.File;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CountDollarsCF {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("Enter file path.");
Scanner reader = new Scanner(System.in);
String input = reader.nextLine();
File file = new File("src/" + input);
Scanner data = new Scanner(file);
int sets = 0;
sets = data.nextInt();
ArrayList<Integer> datasets;
datasets = new ArrayList<>();
while(data.hasNextInt()){
datasets.add(data.nextInt());
}
data.close();
}
}
我应该补充一点,我可以使用的工具有限。我只关注 Lewis 和 Loftus 撰写的 Java Software Solutions 的第 5 章。所以我们还没有学习地图、转换、哈希图或集合。我们只需要数组列表,并创建一些类。我将截断到最接近的整数,目标是输出如下内容:
第 1 行:0 美元
第 2 行:0 美元
第 3 行:2297 美元
第 4 行:10289 美元
第 5 行:296 美元
解决方案
一个不错的策略的提示。如果每行的总和必须以美元为单位,这是有效的。只要知道double
你可能会失去一些精确度。
编辑以符合 OP 先决条件(仅ArrayList
)。
try (final Scanner data = new Scanner(file)) {
final int lines = data.nextInt();
final Collection<Double> totalPerLine = new ArrayList<>(lines);
for (int i = 0; i < lines; i++) {
double sum = 0;
for (int j = 0; j < 13; j++) {
final int value = data.nextInt();
sum += getDollars(j, value);
}
totalPerLine.add(sum);
System.out.println("Line " + i + ": $" + sum);
}
}
private static double getDollars(
final int type,
final int value) {
switch (type) {
case 0: // Penny
return value / 100D;
case 1: // Nickle
return value / 20D;
case 2: // Dime
return value / 10D;
case 3: // Quarter
return value / 4D;
case 4: // Half
return value / 2D;
case 5: // Dollar coin
case 6: // Dollar bill
return value;
case 7: // Two dollars bill
return value * 2D;
case 8: // Five dollars bill
return value * 5D;
case 9: // Ten dollars bill
return value * 10D;
case 10: // Twenty dollars bill
return value * 20D;
case 11: // Fifty dollars bill
return value * 50D;
case 12: // A hundred dollars bill
return value * 100D;
default:
return 0;
}
}
推荐阅读
- python - 3d 网格上描述符的着色函数
- java - 下载二进制文件抛出 org.jvnet.mimepull.MIMEParsingException: java.io.IOException: Stream Closed
- scala - 如何从scala中的列表中创建一个元组?
- sql - 复杂的 JOIN 查询 SQL Server
- javascript - Cocos2djs 中的 FPS 下降
- matlab - 将文本文件中的整数存储到变量数组中
- ios - 使用手表和 iPhone 的蓝牙连接的距离
- python - Pytest、setup_method 和类级模拟
- flutter - 向日期添加天数无法正常工作
- php - 如何在 Windows plesk 服务器中重写 htaccess 规则