Что квадратные скобки перед числом означают в Java? например [] 89 или [1, 2, 3] 89 - PullRequest
0 голосов
/ 01 июля 2019

Я новичок в Java и не смог найти никаких объяснений того, что означает синтаксис, такой как [1, 2, 3, 4] 5.

import java.util.*;

class SumDigPower {

    static List<Long> list = new ArrayList<Long>();
    public static List<Long> sumDigPow(long a, long b) {
      for(long i = a; i<=b; i++) {
        if(isEureka(i)) {
          list.add(i);
        }
      }

      return list;
    }


    public static boolean isEureka(long num) {
        //convert number to string to get length and then sum each digit to the nth power
        //return true or false depending on whether the number qualifies for the list
        String numString = Long.toString(num);
        long sum = 0;

        for(int i = 0; i < numString.length(); i++) {
            sum += Math.pow(Character.getNumericValue(numString.charAt(i)), i+1);
        }

        if(sum == num) {return true;}
        else {return false;}

    }


}

Ожидается: <..., 4, 5, 6, 7, 8, 9, [] 89]> но было: <..., 4, 5, 6, 7, 8, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9,] 89]>

1 Ответ

7 голосов
/ 01 июля 2019

JUnit использует этот синтаксис, чтобы показать, почему тест не прошел, а именно, когда ожидаемая строка не соответствует фактическому значению:

String expected = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 89]";
List<Long> actualLongs = Arrays.asList(
  1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
  1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 89L);
String actualString = actualLongs.toString();
assertEquals(expected, actualString);

JUnit выясняет, что сходно и чем отличается между ожидаемым и фактическим, и использует квадратные скобки, чтобы выделить это. Если вы выровняете биты «ожидаемый» и «но был», вы получите:

expected:<..., 4, 5, 6, 7, 8, 9, []89]>
 but was:<..., 4, 5, 6, 7, 8, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9, ]89]>

... так что это говорит о том, что в этом [] пробеле он не ожидал ничего лишнего, но нашел символы 1, 2, 3, 4, 5, 6, 7, 8, 9,.

Разница становится немного более очевидной, если это не просто дополнительные символы. Например, предположим, что у вас не было дополнительных значений, но последние 89 были вместо 66. Тогда это будет выглядеть так:

expected:<..., 4, 5, 6, 7, 8, 9, [89]]>
 but was:<..., 4, 5, 6, 7, 8, 9, [66]]>

«Там, где я ожидал 89, я нашел 66».

Я не так хорошо знаком с TestNG, но меня не удивит, если он сделает подобное.

Если вы запустите тест в IDEA IntelliJ, он даже уловит этот синтаксис и покажет вам отличное представление ожидаемого, но ожидаемого. Опять же, я не знаком с другими IDE (например, Eclipse), но меня это не удивит, если они тоже так сделают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...