读取数字时出现类型不匹配错误?

时间:2015-06-21 06:08:00

标签: java

所以我正在读取文件中的信息并导致类型不匹配错误。我通过调试器运行它,但我不确定是什么导致它 - 因为它正在读取正确的数字(在这种情况下,2000)但它似乎并不认为它是一个整数?

我的代码如下:

public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    System.out.println("Type In a Question here");
    String q1 = scanner.nextLine();

    System.out.println("Insert Answer here");
    String a1 = scanner.nextLine();

    LieDetector lieDetector = new LieDetector();
    boolean truth = lieDetector.getRandomBoolean();
    // do stuff...
}

它正在阅读这些信息:

  

2014年员工史密斯,John 2000

     

2015年推销员琼斯,比尔3000 100000

     

2014年执行布什,乔治5000 55

     

2014员工Mann,Sarah 4000

     

2015年推销员Marco,Jordan 5300 440000

     

2014年行政长矛,Tom 1000 60

     

2014年员工戈尔,Frank 7000

     

2015年推销员Madison,Michelle 8000 150000

     

2014年行政人员Berry,Ashley 7600 56

(为简单起见,我的错误就行:int monthlysalary = scan.nextInt();)

5 个答案:

答案 0 :(得分:1)

问题是你想跳到下一行而不在某些行上完成令牌。例如

int monthlysalary = scan.nextInt();导致:

2015 Salesman Jones, Bill 3000 100000
                          ^
                          monthlysalary

然后int year = scan.nextInt();导致:

2015 Salesman Jones, Bill 3000 100000
                               ^
                               year

答案 1 :(得分:0)

经过一番头脑风暴后我设法弄明白了 - 问题来自于第一行之后有一条新线("技术上"它是一个回归)并且扫描正在读取在...中并且无法将其解析为整数,因此我为" \ r"添加了另一个分隔符。这让我把它读成整数,问题解决了!

答案 2 :(得分:0)

昨天讨论的类似问题here。我假设在this线程中讨论了根本原因。请查看以下更改:

public class JobSalaries {
    public static void main(String[] args) throws Exception {
        final int ARRAY_SIZE = 10;
        Employee[] employees2014, employees2015;
        int counter2014, counter2015;
        File payroll;

        payroll = new File("jobpayroll.txt");
        employees2014 = new Employee[ARRAY_SIZE];
        employees2015 = new Employee[ARRAY_SIZE];
        Scanner scan = new Scanner(payroll).useDelimiter(",| ");
        counter2014 = 0;
        counter2015 = 0;
        while(scan.hasNext()) {
            int year = scan.nextInt();
            String classification = scan.next();
            String lname = scan.next();
            String fname = scan.next();
          //  int monthlysalary = scan.nextInt();
            int monthlysalary = Integer.parseInt(scan.nextLine());
            if(year == 2014 && classification.equals("Employee")) {
                String name = fname + " " + lname;
                Employee tempemployee = new Employee(name,monthlysalary);
                employees2014[counter2014] = tempemployee;
            }
        }

而不是使用scan.netxtInt()尝试使用scan.nextLine()并将其解析为整数。

答案 3 :(得分:0)

据我所知,您的代码存在两个问题。

  1. 您的数据似乎不是预期的格式。 第二行以后你定义了两个工资,这不是程序所期望的。
  2. 您收到InputMismatchError,因为您未在useDelimiter方法中添加换行符。将您的正则表达式更改为[,\n ],它将起作用。

答案 4 :(得分:0)

这些是你可以做的事情来解决它

  1. 使用分隔符[,\ n]
  2. 由于您没有阅读某一行的所有令牌,请在循环结束处添加scan.nextLine();(这会将扫描仪移至下一行,忽略该行上的其余令牌)。