Java 将用户指定的时间单位转换为另一个时间单位(秒到周、周到小时等)
这里是Java新手。我编写了一个时间转换程序,它接受从0到9e+18的任何数字作为有效输入,ans要求用户提供转换参数,例如从周到秒。在do-while循环中的一大块if-else-if-else行中写入所有计算。每当用户输入“q”退出时,程序就会退出。我当前的程序在不同的时间单位之间完美地进行转换 我的问题是,我如何使用switch语句来代替这个可怕的if-else语句块Java 将用户指定的时间单位转换为另一个时间单位(秒到周、周到小时等),java,if-statement,switch-statement,Java,If Statement,Switch Statement,这里是Java新手。我编写了一个时间转换程序,它接受从0到9e+18的任何数字作为有效输入,ans要求用户提供转换参数,例如从周到秒。在do-while循环中的一大块if-else-if-else行中写入所有计算。每当用户输入“q”退出时,程序就会退出。我当前的程序在不同的时间单位之间完美地进行转换 我的问题是,我如何使用switch语句来代替这个可怕的if-else语句块 if (fromUnit.equals("w") && toUnit.equals("s")) {
if (fromUnit.equals("w") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_WEEK;
System.out.printf("There are %,.2f seconds", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "week" : "weeks");
} else if (fromUnit.equals("h") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_HOUR;
System.out.printf("There are %,.2f seconds", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "hour" : "hours");
} else if (fromUnit.equals("d") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_DAY;
System.out.printf("There are %,.2f seconds", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "day" : "days");
} else if (fromUnit.equals("m") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_MINUTE;
System.out.printf("There are %,.2f seconds", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "minute" : "minutes");
} else if (fromUnit.equals("s") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_SECOND;
System.out.printf("There are %,.2f seconds per second.\n", results);
} else if (fromUnit.equals("w") && toUnit.equals("m")) {
results = userNumber * MINUTES_PER_WEEK;
System.out.printf("\nThere are %,.2f minutes", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "week" : "weeks");
} else if (fromUnit.equals("d") && toUnit.equals("m")) {
results = userNumber * MINUTES_PER_DAY;
System.out.printf("\nThere are %,.2f minutes", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "day" : "days");
} else if (fromUnit.equals("h") && toUnit.equals("m")) {
results = userNumber * MINUTES_PER_HOUR;
System.out.printf("\nThere are %,.2f minutes", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "hour" : "hours");
} else if (fromUnit.equals("m") && toUnit.equals("m")) {
results = userNumber * MINUTES_PER_MINUTE;
System.out.printf("\nThere are %,.2f minutes", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "minute" : "minutes");
} else if (fromUnit.equals("h") && toUnit.equals("h")) {
results = userNumber * HOURS_PER_HOUR;
System.out.printf("\nThere are %,.2f hours in %,d hours.\n", results, userNumber);
} else if (fromUnit.equals("d") && toUnit.equals("h")) {
results = userNumber * HOURS_PER_DAY;
System.out.printf("\nThere are %,.2f hours in %,d days.\n", results, userNumber);
} else if (fromUnit.equals("w") && toUnit.equals("h")) {
results = userNumber * HOURS_PER_WEEK;
System.out.printf("\nThere are %,.2f hours in %,d weeks.\n", results, userNumber);
} else if (fromUnit.equals("d") && toUnit.equals("d")) {
results= userNumber * DAYS_PER_DAY;
System.out.printf("\nThere are %,.2f days in %,d days.\n", results, userNumber);
} else if (fromUnit.equals("w") && toUnit.equals("d")) {
results = userNumber * DAYS_PER_WEEK;
System.out.printf("\nThere are %,.2f days in %,d weeks.\n", results, userNumber);
} else if (fromUnit.equals("s") && toUnit.equals("ms")) {
results = userNumber * MICROSECONDS_PER_SECOND;
System.out.printf("\nThere are %,.3f microseconds in %,d seconds.\n", results, userNumber);
} else if (fromUnit.equals("d") && toUnit.equals("w")) {
results = userNumber * WEEKS_PER_DAY;
System.out.printf("\nThere are %,.3f weeks in %,d days.\n", results, userNumber);
} else if (fromUnit.equals("h") && toUnit.equals("d")) {
results = userNumber * DAYS_PER_HOUR;
System.out.printf("\nThere are %,.3f days in %,d hours.\n", results, userNumber);
} else if (fromUnit.equals("s") && toUnit.equals("h")) {
results = userNumber * HOURS_PER_MINUTE * MINUTES_PER_SECOND;
System.out.printf("\nThere are %,.3f hours in %,d seconds.\n", results, userNumber);
} else if (fromUnit.equals("ms") && toUnit.equals("s")) {
results = userNumber * SECONDS_PER_MICROSECOND;
System.out.printf("\nThere are %,.3f seconds in %,d microseconds.\n", results, userNumber);
} else if (fromUnit.equals("m") && toUnit.equals("ms")) {
results = userNumber * MICROSECONDS_PER_MINUTE;
System.out.printf("\nThere are %,.3f microseconds in %,d minutes.\n", results, userNumber);
} else if (fromUnit.equals("h") && toUnit.equals("ms")) {
results = userNumber * MICROSECONDS_PER_HOUR;
System.out.printf("\nThere are %,.3f microseconds in %,d hours.\n", results, userNumber);
} else if (fromUnit.equals("d") && toUnit.equals("ms")) {
results = userNumber * MICROSECONDS_PER_DAY;
System.out.printf("\nThere are %,.3f microseconds in %,d days.\n", results, userNumber);
} else if (fromUnit.equals("w") && toUnit.equals("ms")) {
results = userNumber * MICROSECONDS_PER_WEEK;
System.out.printf("\nThere are %,.3f microseconds in %,d weeks.\n", results, userNumber);
} else {
System.out.println("\nCannot calculate!\n");
}
} while (userNumber >= 0);
}
}使用switch语句的一种方法是:
String fromTo = fromUnit + toUnit;
switch (fromTo) {
case "ws": // weeks to seconds
// ...
break;
case "hs": // hours to seconds
// ...
break;
case "ds": // days to seconds
// ...
break;
// ...
}
另一种方法是将数据放入HashMap
HashMap map=newhashmap();
地图放置(“ws”,每周一秒);
地图放置(“hs”,每小时秒);
地图放置(“ds”,每天秒);
// ...
字符串fromTo=fromUnit+toUnit;
结果=userNumber*map.get(fromTo);
System.out.printf(“有%,.2f到单位”,结果);
System.out.printf(“in%,d%s.\n”,userNumber,userNumber==1?”来自单位:“来自单位”);
您是否查看了开关的结构?你不懂什么?我懂开关的语法。如何编写转换结构,将周转换为秒、周转换为小时、小时转换为分钟等?我认为来自每个时间单位的每个转换都需要它自己的switch语句,对吗?这要求用户在提示输入转换参数时输入“ws”。目前,用户有3个独立的问题:首先是要转换的单位类型,然后是要转换的单位,最后是值/数字。@mchlvnctry否这不需要这些。看到第一段代码的第一行了吗?这一行将fromUnit
和toUnit
(来自用户的两个独立问题)连接成一个字符串。我很想使用HashMap,但因为这是Java的初学者类,我们只讨论了switch语句,所以我现在想在讲座的范围内。
HashMap<String, Integer> map = new HashMap<>();
map.put("ws", SECONDS_PER_WEEK);
map.put("hs", SECONDS_PER_HOUR);
map.put("ds", SECONDS_PER_DAY);
// ...
String fromTo = fromUnit + toUnit;
results = userNumber * map.get(fromTo);
System.out.printf("There are %,.2f to units", results);
System.out.printf(" in %,d %s.\n", userNumber, userNumber == 1 ? "from unit" : "from units");