从数组中删除并替换空位置

问题描述 投票:0回答:3

我必须创建一个名为cancelPolicy(int polNum)的公共方法,该方法使用给定的策略号从客户端列表中删除策略(如果找到)。如果找到策略,它应该返回true,否则它应该返回false。从阵列中删除策略时,阵列中的空位置应替换为阵列中的最后一个策略。我到目前为止编写的代码:

public int cancelPolicy(int polNum){
    for (int i = 0; i < policies.length; i++) {
        if (policies[i].getPolicyNumber() == polNum) {

        }
    }
    return polNum;
}

我不明白的是如何删除和替换policies[i]数组。

java arrays
3个回答
0
投票

这正是您正在寻找的:

public boolean cancelPolicy(int polNum)
{
    int n =  policies.length-1; //optimization by making n = length-1
    for (int i = 0; i <= n; i++) { //notice equals in condition 
        if (policies[i].getPolicyNumber() == polNum) {
            policies[i] =   policies[n]; //replace i with last if that's what you meant 
            policies[n] = null; //remove loitering
            return true;
        }
    }
    return false;
}

0
投票

要替换找到的策略,您需要执行以下操作:

public boolean cancelPolicy(int polNum){
    for (int i = 0; i < policies.length; i++) {
        if (policies[i].getPolicyNumber() == polNum) {
            policies[i] = policies[arrSize - 1];
            policies[arrSize - 1] = null;
            arrSize--;
            return true;
        }
    }
    return false;
}

在课堂上你需要保留政策数量:

private int arrSize;

或者,您可以重新创建数组:

public boolean cancelPolicy(int polNum){

    for (int i = 0; i < policies.length; i++) {
        if (policies[i].getPolicyNumber() == polNum) {
            int[] newArr = new int[policies.length - 1];
            System.arraycopy(policies, 0, newArr , 0, i);
            System.arraycopy(policies, i + 1, newArr, i, policies.length - i - 1);
            policies = newArr;
            return true;
        }
    }
    return false;
}

最好的,但不确定这个选项是否可用,将使用ListMap


0
投票

你冷得到最后一个非null然后将最后一个元素设置为null。这将“替换”它,所以你不会得到重复的政策。当你想到这样的东西时,老师喜欢它

public boolean cancelPolicy(int polNum){

for (int i = 0; i < policies.length; i++) {
   if (policies[i].getPolicyNumber() == polNum) {
       for (int j = policies.length - 1; j >=0; j--){
           if (policies[j] != null) {
               policies[i] = policies[j];
               policies[j] = null;
               return true;
           }
       }
   }
}
return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.