Java-Debug 读取一行的数据与逐行读取

摘要总结: 这段代码主要实现了一个计算特定年份中给定日期之前的总天数。首先通过BufferedReader读取用户输入的年份、月份和日期。然后,根据年份判断每个月的天数是否为闰年(如果是闰年,则二月份有29天,否则为普通年份的28天)。接着,代码通过循环计算给定日期之前的总天数,包括每个月的天数累加以及给定的天数。最后输出总天数。原代码逐行读取输入数据会导致问题,修改后的代码将输入的年份、月份和日期作为字符串数组读取并分割,避免了异常输入导致的NumberFormatException异常。

重现代码

 import java.io.*;
 ​
 public class Main {
     public static void main(String[] args) throws IOException {
         BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
         int year, month, day;
         String str = buf.readLine();
         year = Integer.parseInt(str);
         str = buf.readLine();
         month = Integer.parseInt(str);
         str = buf.readLine();
         day = Integer.parseInt(str);
 ​
         int total = 0;
 ​
         int[] pinDaysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
                 int[] runDaysInMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
         for (int i = 0; i < month - 1; i++) {
                     if(year%4==0){
                             total += runDaysInMonth[i];
                     }
                     else{
                           total +=pinDaysInMonth[i];
                     }
         }
 ​
         total += day;
 ​
         System.out.println("Total days: " + total);
     }
 }

这段代码的数据读取是逐行读取导致清览题库的检测数据过不了,因为他的检测数据是2021 11 10 这样子的数据,导致输出Exception in thread "main" java.lang.NumberFormatException: For input string: "2021 11 10" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:652) at java.base/java.lang.Integer.parseInt(Integer.java:770) at Main.main(Main.java:8)

修改方式

 import java.io.*;
 ​
 public class Main {
     public static void main(String[] args) throws IOException {
         BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
         String[] inputs = buf.readLine().split(" ");
 ​
         int year = Integer.parseInt(inputs[0]);
         int month = Integer.parseInt(inputs[1]);
         int day = Integer.parseInt(inputs[2]);
 ​
         int total = 0;
 ​
         int[] pinDaysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
                 int[] runDaysInMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
         for (int i = 0; i < month - 1; i++) {
                     if(year%4==0){
                             total += runDaysInMonth[i];
                     }
                     else{
                           total +=pinDaysInMonth[i];
                     }
         }
 ​
         total += day;
 ​
         System.out.println("Total days: " + total);
     }
 }


LICENSED UNDER CC BY-NC-SA 4.0
Comment

粤ICP备2025382526号
公安备案 粤公网安备44080202000201号