我想写一个程序,收到一个输入和输出文件的硬币列表和这些硬币的金额。字符串格式与货币
import java.io.*;
import java.util.*;
public class CookieJar {
public static void cashingIn(File input, File output){
try{
Scanner in = new Scanner(input);
PrintWriter writ = new PrintWriter(output);
double sum = 0;
if(in.hasNext()){
String next = in.nextLine();
Scanner help = new Scanner(next);
while(in.hasNextLine()){
int y = Integer.parseInt(next.substring(0, 1));
if(next.contains("pennies")){
sum += y*0.01;
}
if(next.contains("dimes")){
sum += y*.1;
}
if(next.contains("quarters")){
sum += y*.25;
}
if(next.contains("nickles")){
sum += y*.05;
}
if(next.contains("penny")){
sum += .01;
}
if(next.contains("dime")){
sum += .1;
}
if(next.contains("nickle")){
sum += .05;
}
if(next.contains("quarter")){
sum += .25;
}
if(sum == 0){
String find = String.format("%s", "You have no money in the jar");
writ.println(find);
}
String fixer = String.format("$%sf", sum);
writ.println("You have " + fixer + " in the jar");
}
help.close();
}
else{
String find = String.format("%s" , "You have no money in the jar");
writ.println(find);
}
in.close();
writ.close();
}catch(IOException e){
}
}
}
我用这段代码遇到的问题是我无法从文件中获取硬币的数量,并确定它是什么类型的硬币。这是我正在使用的测试器方法的一个示例。
@Test
public void test3() {
try {
// create file
File input = folder.newFile("input.txt");
File output = folder.newFile("output.txt");
PrintWriter write = new PrintWriter(input);
write.println("32 nickels");
write.println(" 1");
write.println(" nickel 42");
write.println("quarters 1 penny");
write.println("1 quarter 23 pennies 16");
write.println("");
write.println("dimes 1 dime 1 dime 1 dime 1 dime");
write.close();
// invoke program
CookieJar.cashingIn(input, output);
// verify file results
assertTrue ("Output file does not exist", output.exists());
Scanner scan = new Scanner(output);
String expected = "You have $14.64 in the jar";
assertTrue ("Unexpected end of file: expected \"%s\"" + expected, scan.hasNext());
String actual = scan.nextLine();
assertEquals("Incorrect result", expected, actual);
assertFalse ("File contains more data than expected", scan.hasNext());
scan.close();
}
catch (IOException e) {
fail("No exception should be thrown");
}
}
我也必须让这个数字有逗号,如果我进入数千。我可能没有足够的具体知识来帮助我,所以如果你需要更多的澄清,请问。谢谢你的任何帮助。我对形式化很困惑。
不要使用一个'double'代表金钱,它不能完全代表所有的值(例如,'0.1'不能被表示)。改用'BigDecimal'。 – Keppil
“我用这段代码遇到的问题是,我很难得到”也许你可能更具体?问题可能是您使用的是奇怪的子字符串 –
包含“宿舍”的行也包含“季度”,因此您将对所有金额进行重复计算(除了一分钱) –