我正在尝试制作一个程序,该程序将不同类型的美国硬币的总数求和,并将它们的值相加。硬币信息来自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软件解决方案的第5章。因此,我们还没有学习过地图,转换,哈希图或集合。我们只需要排列数组列表,并创建一些类。我将截断到最接近的整数,目标是输出类似以下的内容:
第1行:$ 0
第2行:$ 0
第3行:2297美元
第4行:$ 10289
第5行:$ 296
答案 0 :(得分:1)
一个好的策略的提示。如果每行的总和必须为美元,则这是有效的。只知道使用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;
}
}