当前位置: 首页 > 知识库问答 >
问题:

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

金承嗣
2023-03-14

所以我从文件中读取信息,得到一个类型不匹配错误。我通过调试器运行了它,但我不确定是什么导致了它——因为它正在读取正确的数字(在本例中为2000),但它似乎不认为它是整数?

我的代码如下:

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();
         if(year == 2014 && classification.equals("Employee")) {
            String name = fname + " " + lname;
            Employee tempemployee = new Employee(name,monthlysalary);
            employees2014[counter2014] = tempemployee;
         }
       }
   }
}

从这些信息中可以看出:

2014年雇员史密斯,约翰2000

2015推销员琼斯,比尔3000 100000

2014执行布什,乔治5000 55

2014年员工曼,莎拉4000

2015年销售员Marco,约旦5300 440000

2014年执行官兰斯,汤姆1000 60

2014年雇员戈尔,弗兰克7000

2015年销售员麦迪逊,米歇尔8000 150000

2014执行贝里,阿什利7600 56

(为了简单起见,我的错误是:int monthly工资=scan.nextInt();)

共有3个答案

严宏旷
2023-03-14

昨天在这里讨论过类似的问题。我假设这篇文章中讨论的根本原因。请看看以下变化:

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()尝试使用扫描。nextLine()并将其解析为整数。

宗政卓
2023-03-14

经过一番脑力激荡后,我终于找到了答案——问题是第一行后面有一个新行(“从技术上讲”这是一个返回),扫描正在读取,无法将其解析为整数,所以我为“\r”添加了另一个分隔符,允许我将其作为整数读取,问题解决了!

岳浩宕
2023-03-14

问题是,您想跳转到下一行,而不完成某些行的令牌。举个例子

int monthlysalary=scan。nextInt() 结果:

2015 Salesman Jones, Bill 3000 100000
                          ^
                          monthlysalary

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

2015 Salesman Jones, Bill 3000 100000
                               ^
                               year

 类似资料: