Метод, который использует для вставки циклов дубликаты в StringBuilder - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть метод (это единственный пример, который я сделал, чтобы показать свою проблему), но он очень похож на этот.У метода есть цикл for, где выполняются некоторые действия, как показано ниже.Проблема в том, что возвращаемое сообщение выглядит как Your number 13 is not the highest one., 25, 11, 2, 2, 28, 28, 23, 22, 17 вместо Your number 13, 25, 11, 2, 2, 28, 23, 22, 17 is not the highest one.. У меня мало операторов if, подобных тем, которые в примере добавляют строку несколько раз.Как можно избавиться от дубликатов вместо сообщения, как указано выше, или иногда сообщение добавляется несколько раз Your number 13 is not the highest one., 25, 11, 2, 2, 28, 28, 23, 22, 17 Your number 13 is not the highest one., 25, 11, 2, 2, 28, 28, 23, 22, 17 и так далее.Должен ли я использовать карту или что?Иногда в сообщении нет ключа, в данном случае это число, но это просто строка, которая вместо того, чтобы добавляться один раз, добавляется дважды и т. Д.

Это только краткий пример моей проблемы, этот метод, приведенный ниже, расширен ибольше добавлений, как этот.

 public static String process() {
        StringBuilder sb = new StringBuilder();
        Random rm = new Random();
        for (int i = 0; i < 10; i++) {
            int number = rm.nextInt(30);
            if (sb.length() != 0) {
                sb.append(", " + number);
            } else {
                sb.append("Your number " + number + " is not the highest one.");
            }
        }
        return sb.toString();
    }

Ответы [ 3 ]

0 голосов
/ 29 сентября 2019
public static String process()
{
    StringBuilder sb = new StringBuilder();
    Random rm = new Random();
    sb.append("Your number ").append(rm.nextInt(30)); // code is here to skip coma before the first number
    for (int i = 1; i < 10; i++) // NOTE: i starts from 1, because the first number has been added in the code above
    {
         sb.append(", ").append(rm.nextInt(30));
    }
    sb.append(" is not the highest one.");
    return sb.toString();
}

И немного измененная версия @MushifAliNawaz:

  public static String process()
  {
      String numbers = ThreadLocalRandom.current().ints(0, 30).limit(10)
                .mapToObj(String::valueOf).collect(Collectors.joining(", "));
      return String.format("Your number %s is not the highest one.", numbers);
  }
0 голосов
/ 29 сентября 2019

Я думаю, вам следует использовать List<Integer> здесь, и вместо ручной проверки и добавления запятых, пусть Java автоматически сделает это за вас:

public static String process() {
    Random rm = new Random();
    List<Integer> randomNumbers = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        randomNumbers.add(rm.nextInt(30));
    }
    return String.format("Your number %s is not the highest one.", randomNumbers.stream().map(String::valueOf).collect(Collectors.joining(", ")));
}

Я использовал Collectors.joining с Stream API здесь.

Выход (3 прогона):

Your number 17, 1, 19, 5, 4, 11, 7, 4, 12, 5 is not the highest one.
Your number 29, 17, 4, 23, 28, 28, 16, 2, 23, 7 is not the highest one.
Your number 0, 1, 18, 18, 25, 24, 13, 3, 13, 14 is not the highest one.
0 голосов
/ 29 сентября 2019

Вам нужно только добавить числа внутри вашего цикла.Переместите остальную часть сообщения за ее пределы:

public static String process() {
    StringBuilder sb = new StringBuilder();
    Random rm = new Random();
    for (int i = 0; i < 10; i++) {
        int number = rm.nextInt(30);
        if (sb.length() != 0) {
            sb.append(", " + number);
        } else {
            sb.append(number);
        }
    }
    return "Your number " + sb.toString() + " is not the highest one.";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...