问题描述
我是Java编程的初学者,我试图使用if语句,仅用于for循环和while循环在12小时和24小时之间进行转换。 请在下面参考我的尝试。 到目前为止,我尝试将时间从12小时转换为24小时。 您可能会发现代码非常荒谬,但我只是无法弄清楚哪里出了问题。 请帮助我的代码..我将不胜感激!
尝试:
import java.util.Scanner;
public class TimeConverter {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("Enter a time ([h]h:mm [am|pm]):");
String input = s.nextLine();
if(input.charAt(input.length()-1)== "m")
String x = input.substring(0,2);
int TwentyFour = int x + 12;
System.out.println(TwentyFour);
}
}
谢谢
1楼
为什么要在if语句中测试“ m”。 AM和PM都不会有那个“ m”。 我会说在if语句中测试“ a”或“ p”,然后在else语句中处理相反的情况。
另一件事是用户可以输入大写或小写字母,因此您也需要处理。 一种简单的方法是首先存储要测试的字母,然后使用String类的toUpperCase方法。
另外,我假设您希望用户能够以可变格式输入。 例如9:00 PM或09:00 PM。 为了处理这些情况,我将检查“:”所在的索引。 为此,您可以使用字符串类的indexOf()方法。
这将帮助您解决第一种情况,但是您可以实施第二种情况。
import java.util.Scanner;
public class TimeConverter {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("Enter a time ([h]h:mm [am|pm]):");
String input = s.nextLine();
String whichHalf;
whichHalf = input.charAt(input.length()-1);
whichHalf.toUpperCase();
if(whichHalf== "P")//it's PM
String x = input.substring(0,2);
int TwentyFour = int x + 12;
System.out.println(TwentyFour);
}
else //it's AM
{
//don't convert just print
}
}
2楼
是的,您的代码非常不正确。 我记得那些天,我也是初学者学习Java。
这是该程序的更正版本:
import java.util.Scanner;
public class TimeConverter {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("Enter a time ([h]h:mm [am|pm]):");
String input = s.next();
char whichHalf = input.charAt(input.length() - 2);
whichHalf = whichHalf.toUpperCase();
if(whichHalf == 'P'){
String x = input.substring(0, 2);
double twentyFour = Double.parseDouble(x) + 12;
System.out.println(twentyFour);
}
}
}
以下是您将来可能需要注意的陷阱:
-您不能将String直接转换为int。 您必须使用Double.parseDouble()之类的方法
-charAt()方法返回一个字符,而不是字符串,因此不能将其与“ M”进行比较,但可以将其与“ M”进行比较(请注意用撇号代替引号,用char代替String)。 您还检查了错误的字母。 您应该已经检查了“ AM”或“ PM”的首字母。
-最后,我将“ nextLine()”更改为“ next()”,因为我发现“ nextLine()”的行为异常。 这是您不必遵循的个人风格。
就是这样,希望能对您有所帮助! 祝您的程序和编码生涯顺利。