Используя concat с int?(Джава) - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь сделать следующее:

Если пользователь вводит число от 1 до 100, то:

  • Распечатывать каждый порядковый номер от 1 до заданногочисло.

Пример ниже для входного значения 25:

1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
11th
12th
13th
14th
15th
16th
17th
18th
19th
20th
21st
22nd
23rd
24th
25th

Я не могу понять, как добавить: 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 ]

0 голосов
/ 22 октября 2018

Вы можете сделать это без использования concat.Вы можете проверить, является ли число -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)));
}

}

0 голосов
/ 22 октября 2018

вы можете сделать это с помощью 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 ");
}
0 голосов
/ 22 октября 2018

Специальный оператор конкатенации String (+) в Java автоматически преобразует скаляры в строки (когда строка находится слева).Вы можете сделать что-то вроде этого:

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

, где getPostfix вернет соответствующий постфикс для данного целого числа (-st, -nd и т. Д.).Я оставляю реализацию этой функции в качестве упражнения.

...