运行几次后,我的扫描仪停止工作,并给我java.util.InputMismatchException:对于输入字符串:“ 7642874781”

问题描述

在名字之后,查理被打印出来,抛出输入不匹配异常,并说我在int扫描器中输入了一个字符串,但这确实是一个数字,所以为什么告诉我这是一个字符串?

这是扫描仪正在读取的我的文本文件: 爱丽丝,1234567891,优先级 布兰登,1987654321,高级 Charlie,7642874781,常规 丹尼(5274847643),高级

package file reading;

public class Customer {
    
    private String name;
    private int phoneNumber;
    private int seatNumber;
    String  classification;


    public Customer(String name,int phoneNumber,String classification) 
    {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.classification = classification;
    }



    public String getName() {return name;}
    public int getPhoneNumber() {return phoneNumber;}
    public int getSeatNumber() {return seatNumber;}
    public String getClassification() {return classification;}


    public void setName(String name) {this.name = name;}
    public void setPhoneNumber(int phoneNumber) {this.phoneNumber = phoneNumber;}
    public void setSeatNumber(int seatNumber) {this.seatNumber = seatNumber;}
    public void setClassification(String classification) {this.classification = classification;}


    public String toString()
    {
        return "Name: " + name + "\nPhone Number: " + phoneNumber +
        "   \nclassification: "  + classification +"\n";
    }
    
}



package file reading;

import java.util.Scanner;
import java.io.*;

public class URLdissector
{
   //-----------------------------------------------------------------
   //  Reads customer info from a file and prints their path components.
   //-----------------------------------------------------------------
   public static void main(String[] args) throws IOException
   {
      String customerInfo;
      Scanner fileScan,infoScan;
      String name = "",classification = "";
      int phoneNumber = 0,seatNumber = 0;
   
      
      try {     
          fileScan = new Scanner(new File("info.txt"));

          while (fileScan.hasNext())
          {
             customerInfo = fileScan.nextLine();
             System.out.println("Customer: " + customerInfo);
    
             infoScan = new Scanner(customerInfo);
             infoScan.useDelimiter(",");
    
             //  Print each part of the customer info
             while (infoScan.hasNext()) {
                 name = infoScan.next();
                 //The error is hapening right here,right after printing out the name Charlie it won't 
                 //print the phone number and stops everything.
                 phoneNumber = infoScan.nextInt();
                 
                 classification = infoScan.next();

                 
                 Customer customer = new Customer(name,phoneNumber,classification);
                 System.out.println("Customer " + customer);
             }
                
    
             System.out.println();
          }
      }catch (FileNotFoundException f){
          System.out.println ("File not found");
      }
   }

感谢您阅读我的问题!

解决方法

在Java中,integer数据类型为32-bit,其最大值为2,147,483,647,但您输入的字符串为“ 7642874781”,它将转换为7,642,874,781。该值超过整数数据类型的最大值,从而导致错误。

考虑将long数据类型与扫描仪对象的方法nextLong()一起使用。