Как вы определяете массивы разных размеров, используя операторы if в Java? - PullRequest
0 голосов
/ 25 апреля 2019

Итак, я пытался написать несколько тестовых примеров для проекта Java, который я делаю, и решил, что хочу переместить их в собственную функцию и выбирать между ними, используя параметр тестовой функции, вместо того, чтобы просто комментировать и раскомментировать код, как я сейчас делаю. Однако я попал в ловушку: рассматриваемый код включает в себя инициализацию переменных массива, и если я попытаюсь инициализировать их внутри оператора if-else, то другие фрагменты кода позже не смогут их увидеть из-за области видимости. проблемы. Кроме того, в Java массивы имеют фиксированный размер, и в некоторых тестовых примерах используются массивы разных размеров (включая пустые массивы), поэтому простое создание массива перед работой не работает.

Вот код, который я уже пробовал (с arrayGen, являющейся функцией, которая создает целочисленный массив из n элементов, с псевдослучайными значениями, которые лежат между нижней и верхней границами включительно). Обратите внимание, что для того, чтобы изменить какой тестовый пример я запускаю, мне нужно закомментировать текущий тестовый случай и раскомментировать тестовый пример, который я хочу запустить; Я хотел бы заменить это рядом операторов if-else if-else, если это возможно.

    System.out.println("Unsorted:");
    int[] unsorted = arrayGen(n,lower,upper);
    //sorted array:
    //int[] unsorted = new int[n];
    //for (int i=0;i<n;i++)
    //{
    //    if (lower+i<upper)
    //    {
    //        unsorted[i]=lower+i;
    //    }
    //    else unsorted[i]=upper;
    //}
    //reverse sorted array:
    //int[] unsorted = new int[n];
    //for (int i=0;i<n;i++)
    //{
    //    if (upper-i>lower)
    //    {
    //        unsorted[i]=upper-i;
    //    }
    //    else unsorted[i]=lower;
    //}
    //array of static numbers:
    //int[] unsorted = arrayGen(n,upper,upper);
    //empty array:
    //int[] unsorted = arrayGen(0,lower,upper);

Можно ли как-то это исправить и получить более точную версию моего кода, или мне придется застрять с простым комментированием и раскомментированием тестовых примеров, которые я хочу использовать?

1 Ответ

1 голос
/ 25 апреля 2019

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

int[] unsorted = makeTestData("random");

private int[] makeTestData(String type, int n, int lower, int upper){
  switch(type){
    case "random":  return arrayGen(n,lower,upper);
    case "static":  return arrayGen(n, upper, upper);
    case "empty":   return new int[0];
    case "sorted":
       int[] toSort = arrayGen(n, lower, upper);
       Arrays.sort(toSort);
       return toSort;
    default: throw new IllegalArgumentException(type);
   }
}

Если у вас возникнут проблемы с областями видимости переопределенных переменных, попробуйте перенести вещи в их собственные автономные функции.

Носерьезно, попробуйте использовать одну из установленных сред тестирования, таких как JUnit.Они дают вам множество «шаблонных» вещей для запуска и сообщают о тестах бесплатно.

...