Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 从数组中删除中间元素_Java_Arrays - Fatal编程技术网

Java 从数组中删除中间元素

Java 从数组中删除中间元素,java,arrays,Java,Arrays,对于编程任务,我们必须创建执行不同任务的数组方法。对于这一个,如果数组的长度是奇数,我必须删除中间元素,如果数组的长度是偶数,我必须删除两个中间元素 下面是我的方法主体。(值是预先建立的数组的名称)。在这两行上,它都写着“int[]copy=new int[copy.length-1];“我遇到了一个错误”局部变量copy可能尚未初始化“如果您对如何修复该错误有任何想法,或者看到任何其他明显错误,我将非常感谢您的输入:)谢谢 public void removeMidleElement(){ 整

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

下面是我的方法主体。(值是预先建立的数组的名称)。在这两行上,它都写着“int[]copy=new int[copy.length-1];“我遇到了一个错误”局部变量copy可能尚未初始化“如果您对如何修复该错误有任何想法,或者看到任何其他明显错误,我将非常感谢您的输入:)谢谢

public void removeMidleElement(){
整数计数=0;

对于(int i=0;i您正在尝试使用长度字段
copy
初始化
copy
。这没有意义。错误是因为您在初始化copy之前访问copy.length。
我假设您实际上想要值.length。

您试图在副本的初始定义中使用副本的长度,但您不能这样做。您的意思可能是:

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

当您使用copy.length时,您尚未初始化copy,即当您使用copy.length时,copy尚未初始化。您在initilize语句中使用copy.length。顺便说一句,copy.length与variable.length相同。

可能需要尝试类似的操作

    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]);
    }
int[]值={1,2,3,4,5,6};
int半尺寸=(int)(值。长度/2f-0.5);
int[]newValues=newint[halfSize*2];
数组复制(值,0,新值,0,半尺寸);
System.arraycopy(值、值.length-halfSize、新值、halfSize、halfSize);
系统输出打印LN(半尺寸);
for(int i=0;i
这将打印1、2、5、6。 如果您只有5个项目,它将打印1、2、4、5

这里的窍门是半码的。 如果有3个元素:3/2-0.5=1。如果有4个元素:4/2-0.5=1.5=1转换为int

  • 所以在这两种情况下(3个元素和4个元素),我们只取第一个 最后一个元素
  • 如果有5个元素或6个元素,则为半尺寸 将是2,在这两种情况下,我们取前2个元素和 最后2个要素
    • 我的答案:

      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 void removeMidleElement(){
      整数计数=0;
      
      for(int i=0;i您不需要for循环,您可以只使用count=values.length,或者完全去掉count,只使用values.length
      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; 
      }