我必须创建一个名为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]
数组中删除和替换。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
最好的,但不确定此选项是否可用,将使用List
或Map
答案 2 :(得分: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;
}