【发布时间】:2019-02-15 05:48:43
【问题描述】:
我正在使用 Java 的 MessageFormat 类创建一个字符串,该字符串使用 format 方法将多个条件语句作为参数。有了它,我创建了一个使用 ASCII 字符的温度计,它接受一个随机数作为摄氏度,并根据该数字,根据条件在特定位置将星号字符插入到字符串中,例如((celsius >= 25) ? "*" : " ")。换句话说,星号代表温度计中的温度水平,具体取决于温度值。
目前,我在 14 个参数中的每一个参数中都使用了类似的 if 语句,然后确定是否应该在所述位置 temp >= location 或空格 temp <= location 中添加星号。我确信使用另一种方法可以更有效和更清洁地执行此操作,例如内嵌for循环、正则表达式、函数、内置方法等
这是代码示例(注意转义字符):
// random value between -35 and 40
double celsius = Math.round(Math.random() * (40 - 35) - 35);
// ASCII Thermometer
String meter = MessageFormat.format(
" ______________________"
+ "\r\n | ^F _ ^C |"
+ "\r\n | 100 - |{0}| - 40 |"
+ "\r\n | 90 - |{1}| - 30 |"
+ "\r\n | 80 - |{2}| - 25 |"
+ "\r\n | 70 - |{3}| - 20 |"
+ "\r\n | 60 - |{4}| - 15 |"
+ "\r\n | 50 - |{5}| - 10 |"
+ "\r\n | 40 - |{6}| - 5 |"
+ "\r\n | 30 - |{7}| - 0 |"
+ "\r\n | 20 - |{8}| - -5 |"
+ "\r\n | 10 - |{9}| - -10 |"
+ "\r\n | 0 - |{10}| - -20 |"
+ "\r\n | -10 - |{11}| - -25 |"
+ "\r\n | -20 - |{12}| - -30 |"
+ "\r\n | -30 - |{13}| - -35 |"
+ "\r\n | '***` |"
+ "\r\n | (*****) |"
+ "\r\n | `---' |"
+ "\r\n |____________________|"
+ "\r\n\r\n",
((celsius >= 35) ? "*" : " "),
((celsius >= 30) ? "*" : " "),
((celsius >= 25) ? "*" : " "),
((celsius >= 20) ? "*" : " "),
((celsius >= 15) ? "*" : " "),
((celsius >= 10) ? "*" : " "),
((celsius >= 5) ? "*" : " "),
((celsius >= 0) ? "*" : " "),
((celsius >= -5) ? "*" : " "),
((celsius >= -10) ? "*" : " "),
((celsius >= -15) ? "*" : " "),
((celsius >= -20) ? "*" : " "),
((celsius >= -25) ? "*" : " "),
((celsius >= -30) ? "*" : " "));
【问题讨论】:
标签: java ascii-art messageformat