为了账号安全,请及时绑定邮箱和手机立即绑定

将 concat 与 int 一起使用?

将 concat 与 int 一起使用?

慕工程0101907 2021-12-01 19:05:15
我正在尝试执行以下操作:如果用户输入了 1 到 100 之间的数字,则:打印出从 1 到给定数字的每个序数。以下示例适用于输入值 25:1st2nd3rd4th5th6th7th8th9th10th11th12th13th14th15th16th17th18th19th20th21st22nd23rd24th25th我不知道如何在st, nd, rd, th不使用concat.这是我的代码:import java.util.Scanner;public class Main {  public static void main(String[] args) {    Scanner scnr = new Scanner(System.in);   int userNum;  userNum = scnr.nextInt();  for (int i=1; i<=userNum; i++) {  System.out.println(i);    }  }}有没有其他方法可以做到这一点?谢谢。
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

Java 中的特殊String连接运算符 ( +) 会自动将标量转换为字符串(当字符串在左侧时)。你可以这样做:

System.out.println(""+i+getPostfix(i));

wheregetPostfix将为给定的整数(-st、-nd 等)返回一个合适的后缀。我将此功能的实现留作练习。


查看完整回答
反对 回复 2021-12-01
?
斯蒂芬大帝

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 ");

}


查看完整回答
反对 回复 2021-12-01
?
呼啦一阵风

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)));

}

}



查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信