如何使用Java中的if语句定义不同大小的数组?

问题描述 投票:-2回答:1

所以,我试图为我正在做的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);

有没有办法解决这个问题,并且有一个更简洁的代码版本,或者我将不得不坚持只是评论和取消注释我想要使用的测试用例?

java arrays scope variable-declaration
1个回答
1
投票

也许这可以给你一个想法。

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等已建立的测试框架之一。它们为您提供了许多“样板”内容,可以免费运行并报告测试。

© www.soinside.com 2019 - 2024. All rights reserved.