格式化数字打印输出异常
Formatting Numeric Print Output Exception
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Commission2.main(Commission2.java:38)
一开始它运行良好,直到一切都崩溃了。现在我需要帮助。有人吗?
import java.util.Scanner;//程序需要扫描器
导入 java.text.DecimalFormat;
public class Commission2
{
public static void main(String args[])
{
//create Scanner
Scanner input = new Scanner(System.in);
//format decimal with two digits
DecimalFormat twoDigits = new DecimalFormat("0.00");
//format decimal with three digits
DecimalFormat threeDigits = new DecimalFormat("0.000");
//declare all variables
int size,count = 0;
int pay = 200;
double commission = 9/100;
double result = 0;
double item, itemtotal = 0;
//get the limit of the data entry (data validation technique)
do{
System.out.printf("Enter the number of items :");
size = input.nextInt();
}while(size < 0);
//data entry
while (count < size) {
System.out.print("Enter price of item #" +(count + 1) +": ");
item = input.nextInt();
/*Processing!*/
itemtotal += item;
++count;
}//end while
result = (itemtotal * commission) + pay;
System.out.printf("%s%d\n","The total earnings for this week is $",result);
}
}
System.out.printf("%s%f\n", "The total earnings for this week is $", result);
会起作用,因为 %d 只适用于整数,而 %f 适用于浮点数和双精度数。
由于它在 item = input.nextInt() 处失败;
看起来好像您在输入值时尝试使用的不是 int 值。请检查一下。
你为什么不post你使用的输入?
在第 25 行,您声明了 double item
,但在第 38 行,您试图将 input.nextInt()
分配给变量项。
如果您要在此处提供 Integer
值 (5),代码应该会按预期工作。但是,当提供 Double
(5,12) 时,将抛出 InputMismatchException
异常。
要解决此问题,只需更改以下内容:
item = input.nextInt();
对此:
item = input.nextDouble();
在您的 printf 中,您使用十进制整数格式来打印 floats/doubles。
而不是 %d 使用 %f.
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Commission2.main(Commission2.java:38)
一开始它运行良好,直到一切都崩溃了。现在我需要帮助。有人吗?
import java.util.Scanner;//程序需要扫描器 导入 java.text.DecimalFormat;
public class Commission2
{
public static void main(String args[])
{
//create Scanner
Scanner input = new Scanner(System.in);
//format decimal with two digits
DecimalFormat twoDigits = new DecimalFormat("0.00");
//format decimal with three digits
DecimalFormat threeDigits = new DecimalFormat("0.000");
//declare all variables
int size,count = 0;
int pay = 200;
double commission = 9/100;
double result = 0;
double item, itemtotal = 0;
//get the limit of the data entry (data validation technique)
do{
System.out.printf("Enter the number of items :");
size = input.nextInt();
}while(size < 0);
//data entry
while (count < size) {
System.out.print("Enter price of item #" +(count + 1) +": ");
item = input.nextInt();
/*Processing!*/
itemtotal += item;
++count;
}//end while
result = (itemtotal * commission) + pay;
System.out.printf("%s%d\n","The total earnings for this week is $",result);
}
}
System.out.printf("%s%f\n", "The total earnings for this week is $", result);
会起作用,因为 %d 只适用于整数,而 %f 适用于浮点数和双精度数。
由于它在 item = input.nextInt() 处失败; 看起来好像您在输入值时尝试使用的不是 int 值。请检查一下。 你为什么不post你使用的输入?
在第 25 行,您声明了 double item
,但在第 38 行,您试图将 input.nextInt()
分配给变量项。
如果您要在此处提供 Integer
值 (5),代码应该会按预期工作。但是,当提供 Double
(5,12) 时,将抛出 InputMismatchException
异常。
要解决此问题,只需更改以下内容:
item = input.nextInt();
对此:
item = input.nextDouble();
在您的 printf 中,您使用十进制整数格式来打印 floats/doubles。 而不是 %d 使用 %f.