时间码未返回正确的值

时间:2019-04-14 16:19:09

标签: java

我已经有了这段代码,该代码应该根据小时,分钟和AM / PM告诉一天中已经花费了多少时间。如果时间不是实时时间(下午44:65),则应该运行一种无效的时间格式,但是每次我输入时,它都会记录该错误。

import java.util.Scanner;
public class main {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        String time_inp;
        System.out.print("Enter the time in the format hours:minutes AM/PM : ");
        time_inp=sc.nextLine();
        String[] time = time_inp.split(":");
        int hours = Integer.valueOf(time[0]);
        String[] time1=time[1].split(" ");
        int minutes = Integer.valueOf(time1[0]);
        String ampm = time1[1];
        int new_hour=0,new_minutes=0;
        if((minutes>60)||(hours>12)||(!ampm.equals("AM"))||(!ampm.equals("PM")))
        {
            System.out.println("Invalid Time Format");
            System.exit(0);
        }
        if(ampm.equals("AM"))
        {
            new_hour=hours;
            new_minutes=minutes;
        }
        else if(ampm.equals("PM"))
        {
            new_hour=12+hours;
            new_minutes=minutes;
        }
        System.out.println("Time elapsed : "+new_hour+" hours "+new_minutes+" minutes");
    }
}

下午1:30的输出应为

Time elapsed : 13 hours 30 minutes

2 个答案:

答案 0 :(得分:0)

您的 if 条件始终被评估为true

if((minutes>60)||(hours>12)||(!ampm.equals("AM"))||(!ampm.equals("PM")))

看看最后两个检查。不管您输入什么(AM / PM),都将是其中之一。因此,总是执行 if 块。

正确的必须是

if ((minutes > 60) || (hours > 12) || (!ampm.equals("AM") && (!ampm.equals("PM"))))

答案 1 :(得分:-1)

我必须进行测试才能确定,但​​是除了用户输入之外,您似乎还正在读prompt。您可能正在尝试解析:

  

“以小时:分钟AM / PM的格式输入时间:”为integer