我目前正在担任软件测试人员。我有一个场景来测试时间格式。
我想使用java程序输入有效的时间格式。我累了,但无法得到一个好的答案。
我想以正确的格式输入时间(hh:mm:ss)。它接受格式为HH:MM:SS的时间。时间应该用冒号和冒号冒号分隔,没有其他字符如/, - 应该打印无效。 小时范围从0到23,分钟范围从0到59,第二小时范围从0到59.
只有数字被加入,如果我输入字符,它将打印无效的时间格式。
这两个值20:62:00和20:80:00,也是无效的,因为分钟的范围应该是0到59.
这是我试过的:
import java.util.Scanner;
public class AlarmTime {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
System.out.println("Enter the number of test case");
int a = s.nextInt();
System.out.println("Enter the HH");
int h = s.nextInt();
System.out.println("Enter the MM");
int m = s.nextInt();
System.out.println("Enter the SS");
int ss = s.nextInt();
System.out.println("Time is" + h + ":" + m + ":" + ss);
if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && ss >= 0 && ss <= 59) {
System.out.println("Valid test case" + h + ":" + m + ":" + ss);
} else {
System.out.println("invalid test case");
}
}
}
输出:
Enter the number of test case
4
Enter the HH
22
Enter the MM
33
Enter the SS
44
Time is22:33:44
Valid test case22:33:44
Process finished with exit code 0
在这里,我将测试用例编写为4,然后再编写下一个测试用例2.我还需要为输入字符等无效输入编写测试用例。
答案 0 :(得分:3)
if(0<=h<=23 ||0<=m<=59||0<=ss<=59)
不是有效的语法。您无法链接<=
运算符。
您应该比较每个操作数的一对一,并在比较之间使用&&
运算符。
这个
if(0<=h<=23)
应该是:
if(0<=h && h<=23)
无论如何,这不是一种直接而可靠的方式来完成任务
请使用DateTimeFormatter
而不是int
,使用包含输入格式正确的String
变量:
StringBuilder dateInput = new StringBuilder();
System.out.println("Enter the number of test case");
int a = dateInput.append(s.next());
System.out.println("Enter the HH");
dateInput.append(s.next()).append(":");
System.out.println("Enter the MM");
dateInput.append(s.next()).append(":");
System.out.println("Enter the SS");
dateInput.append(s.next());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
try{
LocalTime time = LocalTime.parse(dateInput.toString(), formatter);
System.out.println("Valid");
}
catch(DateTimeParseException e){
System.out.println("Invalid");
}
答案 1 :(得分:2)
正如其他答案清楚地指出的那样,你的条件错了。转到if (hour <= 0)
然后打印“有效”是完全错误的。
但是除了那些简单的句法问题之外:你在这里重新发明。除非这是您自己编写此类代码的某种练习,否则您将使用Java日期/时间API的强大功能:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String str = "13:42:10";
LocalTime time = LocalTime.parse(str, formatter);
答案 2 :(得分:0)
错误在于此处,必须是and
条件,而不是or
。
小时必须低于24,分钟必须低于60,秒必须低于60。
if(0<=h<=23 && 0<=m<=59 && 0<=ss<=59){
System.out.println("Valid test case"+h+":"+m+":"+ss);
}
else
{
System.out.println("invalid test case");
}
答案 3 :(得分:0)
您应该接受hh:mm:ss
而不是将其作为3个变量,然后通过尝试将其解析为日期来验证它。
以下是:
System.out.println("Enter date as HH:MM:SS");
String a = s.nextString();
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
Date parsedDate = dateFormat.parse("12-12-2017 "+yourString);
// Parsing success, means a valid test case.
System.out.println("Valid test case : "+a);
} catch(Exception e) {
// Parsing failed, so the case is invalid!
System.out.println("Invalid");
}
答案 4 :(得分:0)
使用SimpleDateFormat
并将其lenient
属性设置为false
。然后检查parse
方法是否返回null
(这表示无效日期)。请参阅此处的API文档:http://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html#setLenient-boolean-
答案 5 :(得分:0)
neetha。
您的代码不正确。验证必须如下:
if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && ss >= 0 && ss <= 59) {
System.out.println("Valid test case" + h + ":" + m + ":" + ss);
}
无论如何,最好使用像LocalTime
这样的类(如果你使用Java 8)来管理时间:
LocalTime time = LocalTime.of(h, m, ss);
如果时间无效,此代码会抛出java.time.DateTimeException
。