通过索引获取价值。但功能有限(用户定义功能)

时间:2018-08-24 12:36:27

标签: java

只有这四种方法:

  • addFirst()->在索引0处添加项目。
  • addLast()->在最后一个索引处添加项目。
  • removeFirst()->删除第一项。
  • removeLast()->删除最后一项。

下面的代码是到目前为止我尝试过的,但是我无法使队列与初始队列相同:

public static int get(Deque queue, int index) throws Exception {

    int value = 0;

    for (int i = 0; i <= index; i++) {
        if (value != 0) {
            for (int j = 0; j < index; j++) {
                queue.addFirst(value);
            }
        }
        value = queue.removeFirst();
    }

    System.out.print(value);
    System.out.println();
    return value;
}

我需要通过索引获取arraylist的值

1 个答案:

答案 0 :(得分:0)

很抱歉,您的回复很晚,但是我认为我已经找到了解决您问题的方法。您不需要使用任何其他队列来存储原始队列的项目。可以为您解决的方法是修改for循环。 您可以这样做:

  1. 为方法结果创建变量。
  2. 创建其他临时变量以存储当前处理的队列项目。
  3. 遍历所有队列项,执行以下操作
    1. 删除第一个队列项并将其分配给临时变量。
    2. 将临时变量添加到队列的末尾。
    3. 如果当前循环索引与作为方法参数传递的索引相同,则将临时变量的值分配给结果变量。
  4. 返回结果变量。

这不是完美的解决方案,因为您将必须检查期望索引是否不小于0或大于队列大小,但是它应该为您提供解决方案的基本框架并允许您为输入队列保留原始内容。

可用于执行我描述的步骤的代码如下

public static int get(Deque<Integer> queue, int index) throws Exception {
    Integer value = null;
    Integer currentValue = null;
    int queueSize = queue.size();

    for (int i=0; i<queueSize; i++) {
        currentValue = queue.removeFirst();
        queue.addLast(currentValue);
        if (i == index) {
            value = currentValue; 
        }
    }
    return value;
}

请注意,我已经在队列参数(Deque<Integer> queue), as without it you would have to cast value returned by queue.removeFirst()``中向循环中的Integer / int添加了类型声明。