Сравнение строки [] с использованием Junit4 - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь выполнить тест по методу:

public  String[] getFooBar(int size) {
    String[] stringsArray = new String[100];
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i <= size; i++) {
        stringBuilder.append(String.format(i + " "));
        if (i % 3 == 0) {
            stringBuilder.append(String.format("Foo"));
        }
        if (i % 5 == 0) {
            stringBuilder.append(String.format("Bar"));
        }
        stringBuilder.append(System.lineSeparator());
        stringsArray[i] = stringBuilder.toString();
    }
    return stringsArray;
}

}

Я пытался использовать индекс для Array, преобразовать его в строки, используя Array.ToString, и сравнить его с Строковое значение, например "FooBar". Что происходит, когда я пытаюсь найти один индекс, например. 50 Я получаю все индексы из таблицы, начиная с 0 - 50. Я пытался сделать ArrayList, но результат был тот же. Кто-нибудь подскажет, как проверить этот метод?

1 Ответ

0 голосов
/ 30 января 2020

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

index 0: 0
index 1: 0 1
index 2: 0 1 2
index 3: 0 1 2 3 foo
index 4: 0 1 2 3 foo 4
index 5: 0 1 2 3 foo 4 5 bar

Я предполагаю, что это та же концепция, что и FizzBuzz, что означает, что у вас, скорее всего, есть другая проблема: вы добавляете индекс каждый раз, независимо от того, является ли он кратное 3 или 5. Я уверен, что вы этого не хотите. Вы, вероятно, хотите что-то ближе к этому:

public  String[] getFooBar(int size) {
    String[] stringsArray = new String[100];

    for (int i = 0; i <= size; i++) {
        StringBuilder stringBuilder = new StringBuilder();
        if (i % 3 == 0) {
            stringBuilder.append(String.format("Foo"));
        }
        if (i % 5 == 0) {
            stringBuilder.append(String.format("Bar"));
        }
        if(i % 5 != 0 && i % 3 != 0) {
            stringsArray[i] = Integer.toString(i);
        } else {
            stringsArray[i] = stringBuilder.toString();
        }
    }
    return stringsArray;
}

Но на самом деле не все это нужно. Вы можете просто сделать это:

public String[] getFooBar(int size) {
  String[] arr = new String[100];
  for(int i = 0; i <= size; i++) {
    String str = ""; // In situations like this the JVM turns this into a StringBuilder behind the scenes
    if(i % 3 == 0) {
      str += "Foo";
    }
    if(i % 5 == 0) {
      str += "Bar";
    }
    if(i % 3 != 0 && i % 5 != 0) {
      arr[i] = Integer.toString(i);
    } else {
      arr[i] = str;
    }
  }
  return arr;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...