我坚持使用Java

时间:2019-12-01 07:28:10

标签: java

1:您好。我不知道为什么我的Java无法运行。我认为我的代码很好。谁能帮我吗? 这是我运行后显示的错误消息。错误消息显示在下面。
如果有人可以帮助我提供此代码,那就太好了。谢谢

这是我文件的内容

A   1   50      3
B   2   1300    104
C   3   9000    900
D   4   1500    

其中

  • A-D代表交易代码
  • 1-4代表员工编号
  • 50,1300,9000,1500代表零售价格

最后一部分代表我计算出的佣金

  1. 这是问题。

销售佣金文件上的交易记录包含所售商品的零售价格, 交易代码,指示商品可以属于的销售佣金类别, 以及出售该物品的人的员工编号。交易代码可以包含 表示佣金百分比为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)

2 个答案:

答案 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来解析记录。


供以后参考:您可以通过以下操作自己解决这些问题:

  1. 读取堆栈跟踪以查找已引发的异常,引发的异常以及代码调用到异常发生的位置的代码。

  2. 阅读javadocs中的异常信息以及(通常)代码所调用的API方法。

  3. 找出异常在程序及其输入上下文中的含义。