1:您好。我不知道为什么我的Java无法运行。我认为我的代码很好。谁能帮我吗?
这是我运行后显示的错误消息。错误消息显示在下面。
如果有人可以帮助我提供此代码,那就太好了。谢谢
这是我文件的内容
A 1 50 3
B 2 1300 104
C 3 9000 900
D 4 1500
其中
最后一部分代表我计算出的佣金
销售佣金文件上的交易记录包含所售商品的零售价格, 交易代码,指示商品可以属于的销售佣金类别, 以及出售该物品的人的员工编号。交易代码可以包含 表示佣金百分比为6%,8%或10%的值A,B或C 分别。构造一个算法,将读取文件上的记录,计算佣金 凭此记录并打印零售价,佣金和员工编号。
将其转换为Java
import java.util.Scanner;
import java.io.*;`
public class Question1
{
public static void main(String[] args) throws Exception
{
Scanner input = new Scanner (new File ("C:\\Users\\leeli\\Desktop\\Assignment2Qns1.txt"));
double retailprice, commission;
String Empnum;
char transcode;
while(input.hasNext())
{
retailprice = input.nextDouble();
commission = input.nextDouble();``
Empnum = input.next();
transcode = input.next().charAt(0);
if (transcode == 'A' || transcode == 'a')
{
commission = retailprice *0.06;
}
else if (transcode == 'B' || transcode == 'b')
{
commission = retailprice *0.08;
}
else if (transcode == 'C' || transcode == 'c')
{
commission = retailprice *0.1;
}
else
{
commission = 0;
System.out.print("Invalid transaction code");
}
System.out.println("Transaction code \t Employee Number \t Retail Price \t Commission");
System.out.println(transcode + "\t" + Empnum +"\t" + retailprice +"\t" + commission);
}
}
}
//run:
//Exception in thread "main" java.util.InputMismatchException
//at java.util.Scanner.throwFor(Scanner.java:909)
//at java.util.Scanner.next(Scanner.java:1530)
//at java.util.Scanner.nextDouble(Scanner.java:2456)
//at Question1.main(Question1.java:18)
//Java Result: 1
//BUILD SUCCESSFUL (total time: 0 seconds)
答案 0 :(得分:1)
您从文件中读取的顺序非常重要,因为您未按正确的顺序读取内容,所以出现了错误。您应该阅读此订单中的内容转码,Empnum,retailprice,佣金。这将解决您的问题:
transcode = input.next().charAt(0);
Empnum = input.next();
retailprice = input.nextDouble();
commission = input.nextDouble();
答案 1 :(得分:0)
比较输入文件和您的代码:
在输入文件中,记录由字母组成,后跟两个或三个数字。
您的代码正在尝试将记录读为两个(浮点数)数字,后跟两个字符串。
因此,您的代码试图读取一个字母,就好像它是一个数字一样。那行不通。这就是导致InputMismatchException
异常的原因。
解决方案:更改代码以匹配输入文件的格式。
如果您的示例输入文件正确,那么更改nextXXX
调用的顺序是不够的。这不能解决“ commission”字段是可选的事实。相反,您应该使用Scanner::nextLine
阅读每条记录,然后创建一个新的Scanner
来解析记录。
供以后参考:您可以通过以下操作自己解决这些问题:
读取堆栈跟踪以查找已引发的异常,引发的异常以及代码调用到异常发生的位置的代码。
阅读javadocs中的异常信息以及(通常)代码所调用的API方法。
找出异常在程序及其输入上下文中的含义。