【问题标题】:Assigning array values using exception handling使用异常处理分配数组值
【发布时间】:2015-09-06 18:13:18
【问题描述】:

我正在编写一个循环,将数字 15 分配给数组中的每个元素,而不使用任何比较运算符,例如 或 !=。

显然有一种方法可以使用异常处理来做到这一点。

有什么想法吗?

这是我尝试过的:

public class ArrayProblem {


public static void main(String[] args) {

    int[] arrayElements = {0,0,0,0,0};
    boolean isValid = true;
    System.out.println("Array element values before: " + arrayElements[0] + "," + arrayElements[1] + "," + arrayElements[2] + "," + arrayElements[3] + "," + arrayElements[4]);

   try
    {
       while(isValid)
       {
       throw new Exception();
       }
     }

   catch(Exception e)
    {
        System.out.println(e.getMessage());
    }

    finally
    {
        //finally block executes and assigns 15 to each array element
        arrayElements[0] = 15;
        arrayElements[1] = 15;
        arrayElements[2] = 15;
        arrayElements[3] = 15;
        arrayElements[4] = 15;
        System.out.println("New array element values are " + arrayElements[0] + "," + arrayElements[1] + "," + arrayElements[2] + "," + arrayElements[3] + "," + arrayElements[4]); 
    }
  }
}

【问题讨论】:

  • 1.当你可以不用时为什么要引入try ... catch
  • 您的解决方案假定数组的大小为 5。这是问题所在吗?您需要动态执行吗?
  • 数组的大小是任意的,我的例子中只使用了5个数组元素,可以是任意数量的元素。

标签: java arrays exception


【解决方案1】:

Arrays.fill(intArray, 15);

在内部,这个函数可能会进行比较,但也许它符合您的限制条件?

如果解决方案需要循环,这是另一种不直接比较的方法:

int[] array = new int[10];
int arrIdx = -1;
for (int i : array){
    arrIdx++;
    array[arrIdx]=15;
    System.out.println(array[arrIdx]);
}

【讨论】:

  • 这可能行得通,我认为问题中唯一的限制是循环必须使用规定的运算符将值 15 分配给数组的每个元素,所以我不明白为什么无法使用 Arrays.fill 函数解决问题。
  • @SteveWalsh 刚刚添加了另一个不需要 try-catch 的解决方案。
【解决方案2】:

这在实际代码中是一个糟糕的想法。如果您只是需要一个 hackish 解决方案,只需在递增索引计数器的同时循环访问每个数组元素,直到超出范围

// prepare array, arbitrary size
Random random = new Random();
int size = random.nextInt(20);
int[] array = new int[size];

int i = 0;
// solution
try {
    for (;;)
        array[i++] = 15;
} catch (ArrayIndexOutOfBoundsException e) {
    // ignore
}

// verify
System.out.println(Arrays.toString(array));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多