【问题标题】:How to modify the size of a global array inside a constructor [closed]如何在构造函数中修改全局数组的大小[关闭]
【发布时间】:2013-03-12 10:26:03
【问题描述】:

如果插槽已满,我需要将数组中的插槽数加倍。我的代码目前位于 我的层次结构是

public class Stack {
   Object filearray[]= new Object [5];

   public Object push(element) {
       if (filearray[filearray.length - 1] != null) {
            Object temp_array[] = new Object[filearray.length*2];
            int origonal = filearray.length*2;
            //adding the element that the user passed in
            temp_array[0] = element;
            for(int i =0; i<filearray.length;i++) {
                temp_array[i+1] =filearray[i];
            }
            //wiping the filearray clear
            Object filearray[] = new Object [origonal];
            for (int i=0; i<temp_array.length; i ++) {
                filearray [i]=temp_array[i];
            }
            return filearray;
        }
    }
}

【问题讨论】:

  • 你必须使用对象数组吗?向量/列表呢?你到底有什么问题?
  • @giorashc,不幸的是,按照说明,它必须是一个数组。
  • 那么问题出在哪里?
  • 这是一个可怕的问题。充满了自我矛盾,几乎不可能知道你真正在问什么。 1)这里没有构造函数。 2)这里没有全局变量。 3)你没有说push实际上应该做什么。 4)你没有解释你的问题/陈述一个实际问题。

标签: java arrays size global-variables


【解决方案1】:

新的双倍大小数组永远不会保留在实例中,因此请查看以下内容来修复它:

public Object push(element)
{

    if (filearray[filearray.length - 1] != null)
    {
        Object temp_array[] = new Object[filearray.length*2];
        int origonal = filearray.length*2;
        //adding the element that the user passed in
        temp_array[0] = element;
        for(int i =0; i<filearray.length;i++)
        {
            temp_array[i+1] =filearray[i];
        }

        this.filearray = temp_array;
    }
}

您不需要擦除旧数组,只需将其更改为对新分配数组的引用即可。

【讨论】:

  • 谢谢,非常感谢 :)
【解决方案2】:

在上面,您正在创建一个新的 local 数组,其作用域是方法。你没有改变原来的班级成员。这个:

    //wiping the filearray clear
    Object filearray[] = new Object [origonal];

创建一个隐藏类成员的数组filearray。您只需要创建临时数组,然后执行:

    filearray = temp_array;

交换引用。

我可能会调查ArrayList,因为它会在幕后完成所有这些工作,以及(不相关的)Java generics,因为这会给你类型安全(除非你真的 想要存储Objects)

【讨论】:

  • @giorashc 是正确的,我尝试将数组复制到更大的数组中。既然定义了全局变量,我将如何切换引用?我为这个问题可能的阴霾道歉
  • 同意。修改/扩展/重写等!
  • 谢谢,非常感谢 :)
猜你喜欢
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
相关资源
最近更新 更多