3 回答
TA贡献1744条经验 获得超4个赞
Java 中的特殊String
连接运算符 ( +
) 会自动将标量转换为字符串(当字符串在左侧时)。你可以这样做:
System.out.println(""+i+getPostfix(i));
wheregetPostfix
将为给定的整数(-st、-nd 等)返回一个合适的后缀。我将此功能的实现留作练习。
TA贡献1827条经验 获得超8个赞
你可以用 printf 做到这一点
for (int i=1; i<=userNum; i++) {
System.out.printf("%d%s\n",i,i%10==1 && i>19 ? "st " : i%10==2 && i>19 ? "nd " : i%10==3 && i>19 ? "rd " : "th ");
}
TA贡献1802条经验 获得超6个赞
你可以不使用 concat 来做到这一点。您可以使用模数检查 number -st -nd -rd (% 10)
import java.util.*;
import java.util.AbstractMap.SimpleEntry;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Main {
private static final String DEFAULT_POSTFIX = "th";
private static final Map<Integer, String> POSTFIX_MAP =
Stream.of(
new SimpleEntry<>(1, "st"),
new SimpleEntry<>(2, "rd"),
new SimpleEntry<>(3, "nt"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
private static String getPostfix(int number) {
if (Arrays.asList(11,12,13).contains(number)) return DEFAULT_POSTFIX;
return Optional
.ofNullable(POSTFIX_MAP.get(number % 10))
.orElse(DEFAULT_POSTFIX);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int userNum = scanner.nextInt();
IntStream
.rangeClosed(1, userNum)
.forEach(it -> System.out.println(it + getPostfix(it)));
}
}
添加回答
举报