Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写这个工作的Java数组,使其更容易、更好或更高效,而无需ArrayList_Java - Fatal编程技术网

重写这个工作的Java数组,使其更容易、更好或更高效,而无需ArrayList

重写这个工作的Java数组,使其更容易、更好或更高效,而无需ArrayList,java,Java,吉日 我有一个面向对象编程入门课程的Java作业。我已经完成了作业,程序按预期工作(我花了一段时间才完成!),我得到了所需的输出。就在我的一个方法中,我使用了两个FOR循环和一个IF语句,我想知道是否还有其他更简单、更好或更有效的方法?但我不允许使用ArrayList。我知道ArrayList更简单、更好、更高效,但是如果不使用ArrayList,是否可以使我的代码更好,并且仍然获得相同的结果 基本上,我要求用户键入属性对象的ID号,然后将该ID与数组索引位置相匹配,将该对象从一个数组(prop

吉日

我有一个面向对象编程入门课程的Java作业。我已经完成了作业,程序按预期工作(我花了一段时间才完成!),我得到了所需的输出。就在我的一个方法中,我使用了两个FOR循环和一个IF语句,我想知道是否还有其他更简单、更好或更有效的方法?但我不允许使用ArrayList。我知道ArrayList更简单、更好、更高效,但是如果不使用ArrayList,是否可以使我的代码更好,并且仍然获得相同的结果

基本上,我要求用户键入属性对象的ID号,然后将该ID与数组索引位置相匹配,将该对象从一个数组(propertiesForSale)复制到另一个数组(PropertiesOld),在删除和压缩之前向我的计数器(NumPropertiesOld)添加一个增量1(我的老师说重新洗牌)第一个(propertiesForSale)数组,并将我的其他计数器(numPropertiesForSale)递减1

我的代码如下

public void sellProperty(int inID)
    {
         for (int index = 0; index < numPropertiesForSale; index++) {

            if (propertiesForSale[index].getId() == inID) {

                propertiesSold[numPropertiesSold]= propertiesForSale[index];
                numPropertiesSold++;

                for (int i = index; i < numPropertiesForSale; i++) {

                propertiesForSale[i] = propertiesForSale[i + 1];
                }

                numPropertiesForSale--;
            }
        }
    }
public void sellProperty(int-inID)
{
for(int index=0;index
如果有一种更简单、更好或更有效的方法而不使用ArrayList,我只是想看看是否有以及如何做到


感谢您的时间、耐心和投入(如果有的话)。

如果您不允许使用
ArrayList
,在我看来这几乎是您所能做的最好的了


虽然您可能希望使用
System.arraycopy()
而不是使用循环来向下移动Sale
数组的
属性,而不是使用自己的循环,因为
arraycopy()
是一种本机方法。

您可以使用由节点组成的自定义链接列表。这样,在出售房产时就不需要移动数组的条目;您只需从列表中删除节点并更新指针。

您正在
properties for sale
中搜索
inID
。找到匹配项后,将该对象转移到
propertiesSold
中的下一个索引中,然后通过将其上的所有记录转移到下一个索引来压缩数组。最后一个元素就留在那里,但在下一次查找中不会访问它,因为您减少了计数

另一种选择是根本不压缩数组,而是将其设置为null。当然,您必须调整外部for循环中的max界限,并添加一个非null检查,但内部for循环已消失


更好吗?大概你的东西很好

在出售房产之前,通过完全填充
properties for sale
数组来测试代码。也就是说,当您尝试删除一个元素时,如果
numPropertiesForSale==propertiesForSale.length
会发生什么情况?

啊,是的,谢谢您指出这一点。您在使用贴图方面也受到限制吗?使用K->V模型比使用线性阵列结构要好得多,而且效率更高。谢谢,我将研究API上的System.arrayCopy并对其进行一次尝试。由节点组成的自定义链接列表?我不知道那是什么,但我会在谷歌上搜索一下,看看我是否能找到答案,然后再玩一玩。谢谢,谢谢你的回复。我试图理解并使用正确的术语。那么从技术上说我是在压缩阵列?不在两个阵列之间移动对象?您的意思是我通过删除该数组索引来压缩该数组,从而压缩其余的数组索引吗?我现在意识到,我应该说我正在将对象复制到另一个阵列,因为我实际上没有移动它。从技术上讲,你没有压缩,因为阵列大小没有改变。是的,您正在将引用从一个数组复制到另一个数组。但在那之后,你要将元素向下移动。我建议您以额外的空检查为代价来避免这种情况。在我完成这段代码之前,我相信您建议的场景中有一个越界异常。我花了一段时间才意识到这就是正在发生的事情,因为我不明白为什么它不起作用!我有一个变量MAX_PROPERTIES设置为10,总属性只有5个(这些都是由老师设置的)。我认为这就是不使用ArrayList的意义所在,所以我们可以说理解幕后发生了什么。如果我错了,请纠正我!