请帮忙。将来自扫描仪的提示显示到控制台后,出现此错误:
Exception in thread "main" java.util.IllegalFormatPrecisionException: 2
at java.util.Formatter$FormatSpecifier.checkInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.<init>(Unknown Source)
at java.util.Formatter.parse(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.io.PrintStream.format(Unknown Source)
at java.io.PrintStream.printf(Unknown Source)
at Project6.main(Project6.java:56)
问题是来自printf吗?我检查了格式,它看起来正确。
这是程序:
import javax.swing.JOptionPane; // allows for message dialog
import java.util.Scanner; // allows for Scanner object to be used
import java.text.DecimalFormat; // allows for formatting numbers
public class Project6 {
public static void main (String[] args) {
final double LUXURYRATE = .2; // rate of luxury tax
final double STATERATE = .1; // rate of state tax
final double LABORRATE = .05; // rate of labor cost
double diamondCost; // cost of diamond, value comes from the Scanner
double settingCost; // cost of setting, value comes from the Scanner
int numOrdered; // quantity ordered, value comes from the Scanner
double baseCost ; //sum of the values in the variables for diamond and setting
double totalCost; // total cost including tax
double laborCost; // cost of labor
double stateTax; // cost of state tax
double luxuryTax; // cost of luxury tax
double finalAmountDue; // total cost times quantity ordered
DecimalFormat formatter = new DecimalFormat("$#,##0.00"); // money format
Scanner input = new Scanner (System.in); // creates Scanner object
System.out.print("Enter diamond cost:"); // prompts user
diamondCost = input.nextDouble(); // converts input to double
System.out.print("Enter setting cost:"); // prompts user
settingCost = input.nextDouble(); // converts input to double
System.out.print("Enter quantity:"); // prompts user
numOrdered = input.nextInt(); // converts input to integer
baseCost = diamondCost + settingCost; // calculates the cost before multiplication
laborCost = calcExtraCost(LABORRATE , baseCost); // calls method calcExtraCost for calculation
stateTax = calcExtraCost(STATERATE, baseCost); // calls method calcExtraCost for calculation
luxuryTax = calcExtraCost(LUXURYRATE, baseCost); // calls method calcExtraCost for calculation
totalCost = baseCost + laborCost + stateTax + luxuryTax; // total cost including tax and labor costs
finalAmountDue = totalCost * numOrdered; // calculates total
System.out.printf("Diamond Cost: $%,.2d \n", diamondCost); // displays bill to console
System.out.printf("Setting Cost: $%,.2f \n", settingCost);
System.out.printf("State Tax @ 10%: $%,.2f \n", stateTax);
System.out.printf("Luxury Tax @ 20%: $%,.2f \n", luxuryTax);
System.out.printf("Labor Charge @ $5% %,.2f \n", laborCost);
System.out.printf("Total Price: $%,.2f \n" , totalCost);
System.out.printf("Number Ordered: $%,.2d \n", numOrdered);
System.out.printf("Amount Due: $%,.2f \n", finalAmountDue);
JOptionPane.showMessageDialog(null, "Diamond Cost: " + formatter.format(diamondCost) + "\n" +
"Setting Cost: " + formatter.format(settingCost) + "\n" +
"State Tax @ 10%: " + formatter.format(stateTax) + "\n" +
"Luxury Tax @ 20%: " + formatter.format(luxuryTax) + "\n" +
"Labor Charge @ 5% " + formatter.format(laborCost) + "\n" +
"Total Price: " + formatter.format(totalCost) + "\n" +
"Number Ordered: " + formatter.format(numOrdered) + "\n" +
"Amount Due: " + formatter.format(finalAmountDue) ); // displays bill in message dialog
} // end method main
public static double calcExtraCost (double RATE, double bcost) {
double cost = RATE * bcost; // calculates extra cost
return cost; // returns value of extra cost
} // end method calcExtraCost
} // end class Project6
答:因为您的格式说明符与printf
方法中使用的输入参数不匹配。
使用%f
而不是%d
将double
值用作格式说明符
System.out.printf("Diamond Cost: $%,.2f \n", diamondCost);
^
另外%
需要额外%
的逃脱角色
System.out.printf("State Tax @ 10%%: $%,.2f \n", stateTax);
最后,删除不必要的点字符
System.out.printf("Number Ordered: $%,.2d \n", numOrdered);
^
阅读:Formatter
javadoc
我也是Mockito和PowerMockito的新手。我发现我无法使用纯Mockito测试静态方法,因此我需要使用PowerMockito(对吗?)。 我有一个非常简单的类,名为Validate,使用这个非常简单的方法 因此,我需要验证: 1) 当我在null message参数上调用该静态方法时,将调用IllegalArgumentException。2)当我在null object参数上调用该
问题内容: 简介文档中有很多段落专门介绍了和之间的区别,但是实际上,您可以在本地范围内创建对象并将其返回。 为什么要使用一对分配器? 问题答案: 您可以做的事情,您无法做其他任何事情: 建立频道 创建一个预先分配了空间的地图 创建具有预分配空间或len!= cap的切片 证明有一点困难。使它变得更容易的主要事情是创建指向非复合类型的指针。以下两个功能是等效的。简而言之:
我不是流口水的专家。不过,通过实验,我对它有了一些了解。我无法欣赏,为什么我需要它。 我的典型应用程序是业务Web应用程序。是的,他们确实有一些规则。但是,这些都是使用数据库表、SQL查询和中的良好UI来实现的,以便业务用户修改规则。规则不是武断的,它们在投入生产之前是经过仔细考虑的。 我的业务用户永远不会使用(Drools)脚本语言来修改任何内容。更不用说修改规则了。他们非常乐意使用UI屏幕来修
问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。
我用Spring AOP写了一个非常简单的方面。这是可行的,但我在理解到底发生了什么方面有一些问题。我不明白为什么我必须添加aspectjweaver。罐子Spring AOP文档明确指出,只要我只使用Spring AOP,我就不需要aspectj编译器或weaver: 尽管AOP运行时仍然是纯Spring AOP,并且不依赖AspectJ编译器或weaver。 我的配置如下所示: 我也尝试了XM
问题内容: 我用Spring AOP写了一个非常简单的Aspect。它有效,但是我在理解实际情况时遇到了一些问题。我不明白为什么我必须添加Aspectjweaver.jar?Spring- AOP文档明确指出,只要我仅使用Spring-AOP,就不需要AspectJ编译器或weaver: 但是,AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或编织器。 我的配置如下所示: