从数组中删除中间元素

时间:2013-12-04 02:37:57

标签: java arrays

对于编程任务,我们必须创建执行不同任务的数组方法。对于这个,如果数组的长度是奇数,我必须删除中间元素,如果数组的长度是偶数,我必须删除两个中间元素。

以下是我的方法正文。 (values是预先建立的数组的名称)。在两行中,它表示“int [] copy = new int [copy.length-1];”我收到错误“本地变量副本可能尚未初始化”如果您对如何修复或看到任何其他明显错误有任何想法我会非常感谢您的输入:)谢谢

public void removeMiddleElement(){
     int count = 0;
     for(int i=0; i<values.length; i++){
         count++;
     }
     if(count%2==0){
         int middle1=count/2;
         int middle2=(count/2)+1;
         int[] copy = new int[copy.length-1];
         System.arraycopy(copy, 0, copy, 0, middle1);
         System.arraycopy(copy, middle1+1, copy, middle1, copy.length-middle1-1);
         System.arraycopy(copy, 0, copy, 0, middle2);
         System.arraycopy(copy, middle2+1, copy, middle2, copy.length-middle2-1);
         copy = values; 
        }
     else if(count%2!=0){
         int middle3=(int) ((count/2)+.5);
         int[] copy = new int[copy.length-1];
         System.arraycopy(copy, 0, copy, 0, middle3);
         System.arraycopy(copy, middle3+1, copy, middle3, copy.length-middle3-1);
         copy = values;
         }

5 个答案:

答案 0 :(得分:2)

您正尝试使用copy的长度字段初始化copy。这没有意义。该错误是因为您在初始化复制之前访问了copy.length。 我假设你真的想要values.length。

答案 1 :(得分:0)

您正试图在复制的初始定义中使用复制的长度,这是您无法做到的。你可能意味着:

int[] copy = new int[values.length -1];

答案 2 :(得分:0)

当您使用copy.length时,您没有初始化副本,即当您使用copy.length时,copy尚未初始化。你在initilize句子中使用copy.length。顺便说一下,copy.length sames variable.length。

答案 3 :(得分:0)

可能想尝试像

这样的东西
    int[] values = { 1,2,3,4,5,6 };

    int halfSize = (int) (values.length/2f-0.5);

    int[] newValues = new int[halfSize*2];
    System.arraycopy(values, 0, newValues, 0, halfSize);
    System.arraycopy(values, values.length-halfSize, newValues, halfSize, halfSize);

    System.out.println(halfSize);
    for (int i = 0; i < newValues.length; i++) {
        System.out.println(newValues[i]);
    }

这将打印1,2,5,6。 如果您只有5个项目,则会打印1,2,4,5

这里的诀窍是halfSize。 如果你有3个元素:3 / 2-0.5 = 1.如果你有4个元素:4 / 2-0.5 = 1.5 = 1一旦转换为int。

  • 所以在这两种情况下(3个元素和4个元素)我们只采取第一个 和最后一个元素。
  • 如果您有5个元素或6个元素,则为halfSize 将是2,在这两种情况下我们采取前2个元素和 最后2个元素。

答案 4 :(得分:0)

我的回答:

public void removeMiddleElement(){
     int count = 0;
     for(int i=0; i<values.length; i++){
         count++;
     }
     if(count%2==0){
         int middle1=count/2;
         int middle2=(count/2)+1;
         int[] copy = new int[values.length-1];
         System.arraycopy(copy, 0, copy, 0, middle1);
         System.arraycopy(copy, middle1+1, copy, middle1, copy.length-middle1-1);
         System.arraycopy(copy, 0, copy, 0, middle2);
         System.arraycopy(copy, middle2+1, copy, middle2, copy.length-middle2-1);
         copy = values; 
        }
     else if(count%2!=0){
         int middle3=(int) ((count/2)+.5);
         int[] copy = new int[values.length-1];
         System.arraycopy(copy, 0, copy, 0, middle3);
         System.arraycopy(copy, middle3+1, copy, middle3, copy.length-middle3-1);
         copy = values;
         }
}

实际上我使用了数组列表:

public int[] removeMiddle(){

ArrayList<Integer> arrayList = new ArrayList<Integer>();
if (values.length%2 == 0) {
for (int i=0;i<values.length/2-1;i++)arrayList.add(values[i]);
for (int i=values.length/2+1;i<=values.length-1;i++)arrayList.add(values[i]);
} else
{
for (int i=0;i<values.length/2;i++)arrayList.add(values[i]);
for (int i= (values.length/2+1);i<=values.length-1;i++)arrayList.add(values[i]);
}
int[] array = new int[arrayList.size()];
for (int i=0; i <= array.length-1; i++)
    {
        array[i] = arrayList.get(i);
    }
    return array; 
}