尝试从控制台输入中读取日期时的NumberFormatException

时间:2018-03-12 17:37:09

标签: java numberformatexception

所以我试图从日期列表中找到最新日期,但我不断收到NumberFormatException。有什么方法可以解决这个问题吗?

import java.util.*;

public class Date
{
    private String date;
    private int day;
    private int month;
    private int year;

    public Date(String date)
    {

        String [] newDate = date.split(" ");

        this.day = Integer.parseInt(newDate[0]);
        this.month = Integer.parseInt(newDate[1]);
        this.year = Integer.parseInt(newDate[2]);
    }

    public boolean isOnOrAfter(Date other)
    {
        if(this.day < other.day)
        {
            return true;
        }
        else if(this.day == other.day && this.month < other.month)
        {
            return true;
        }
        else if(this.day == other.day && this.month == other.month && this.year < other.year)
        {
            return true;
        }
        return false;
    }

    public String toString()
    {
        return day + "/" + month + "/" + year;
    }

    public static void main(String [] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.print("How many dates: ");

        int num = in.nextInt();

        System.out.println("Enter " + num + " dates: ");

        String [] dates = new String[num];

        for(int i = 0; i < dates.length; i++)
        {
            dates[i] = in.nextLine();
        }

        Date latest = new Date(dates[0]);

        for(int i = 0; i < dates.length; i++)
        {
            Date newDates = new Date(dates[i]);
            if(latest.isOnOrAfter(newDates))
            {
                latest = newDates;
            }
        }
        System.out.println(latest);
    }
}

我认为这只是一个小问题,但我似乎无法找到它。提前谢谢。

我有一个检查最新日期的方法,代码的逻辑对我来说似乎很好,如果你发现逻辑中有任何问题,请告诉我。

日期将一次输入一行,例如:

1 1 1890
1 1 2000
2 1 2000
30 12 1999

输出应为2/1/2000。

2 个答案:

答案 0 :(得分:1)

这里NumberFormatException有两个原因:

1.您在日期,月份和年份之间的输入中有多个空格。  
2。扫描程序的nextInt不使用换行符。因此,您需要在其后面加一个虚拟nextLine。您可以阅读有关此here的更多信息。

int num = in.nextInt();
in.nextLine(); //To consume the new line after entering the number of dates
System.out.println("Enter " + num + " dates: ");

String [] dates = new String[num];
 ...

答案 1 :(得分:0)

NumberFormatException是由Integer.parseInt()试图解析不是整数的字符串引起的。

您的示例输入包含连续的空格,如果按空格拆分输入,并且输入中有多个连续的空格,则生成的数组将包含空字符串。 Integer.parseInt()试图解析其中一个空字符串并导致异常。

而不是

String [] newDate = date.split(" ");

使用

String [] newDate = date.split(" +");

这会将多个空格视为拆分令牌,并仅返回非空格字符。