Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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_For Loop - Fatal编程技术网

Java 数组不复制另一个数组

Java 数组不复制另一个数组,java,arrays,for-loop,Java,Arrays,For Loop,我正试图开发一个程序来删除数组中的所有中值(如果数组中有奇数个元素,则删除中间值;如果数组中有偶数个元素,则删除两个中间值),直到只剩下两个元素,即元素[0]和[1]。例如,如果用户输入1、2、3、4、5,程序将返回[1、5]。我写下了我认为在逻辑上可能有用的东西,但是我的array x没有在for循环中复制myArray。我不是在寻找一个完全为我做代码的人,只是为了指出我错在哪里。这是我的密码: import java.util.*; public class Deletion { pu

我正试图开发一个程序来删除数组中的所有中值(如果数组中有奇数个元素,则删除中间值;如果数组中有偶数个元素,则删除两个中间值),直到只剩下两个元素,即元素[0]和[1]。例如,如果用户输入1、2、3、4、5,程序将返回[1、5]。我写下了我认为在逻辑上可能有用的东西,但是我的array x没有在for循环中复制myArray。我不是在寻找一个完全为我做代码的人,只是为了指出我错在哪里。这是我的密码:

import java.util.*;
public class Deletion
{
   public static void main(String[]args)
   {
      Scanner kb = new Scanner(System.in);
      System.out.println("Please enter the array length:");
      int [] myArray = new int[kb.nextInt()];
      int [] x = new int[myArray.length - 1];
      int index1 = 0;
      int index2 = 0;
      int index3 = 0;
      if(myArray.length < 3)
      {
         System.out.println("Please make sure array length is greater than two. Run again.");
         System.exit(0);
      }
      else
      {
         for(int i = 0; i < myArray.length; i++)
         {
            System.out.println("Please enter a number for position " + i + ":");
            myArray[i] = kb.nextInt();
         }
         for(int i = 0; i < myArray.length; i++)
         {
            while(myArray.length > 2)
            {
               if(myArray.length%2 != 0)
               {
                  index1 = (myArray.length/2);
                  for(int j = 0, r = 0; j < myArray.length; j++)
                  {
                     if(j != index1)
                     {
                        x[r++] = myArray[j];
                        myArray = x;
                     }
                  }
                  x = new int[myArray.length - 1];
               }
               else
               {
                  index2 = (myArray.length/2);
                  index3 = (myArray.length/2 - 1);
                  for(int j = 0, r = 0; j < myArray.length; j++)
                  {
                     if(j != index2 && j != index3)
                     {
                        x[r++] = myArray[j];
                        myArray = x;
                     }
                  }
                  x = new int[myArray.length - 1];
               }
            }
         }
      }
      System.out.println(Arrays.toString(myArray));
   }
}
import java.util.*;
公共类删除
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
System.out.println(“请输入数组长度:”);
int[]myArray=newint[kb.nextInt()];
int[]x=新的int[myArray.length-1];
int index1=0;
int index2=0;
int index3=0;
if(myArray.length<3)
{
System.out.println(“请确保数组长度大于2。再次运行”);
系统出口(0);
}
其他的
{
for(int i=0;i2)
{
如果(myArray.length%2!=0)
{
index1=(myArray.length/2);
for(int j=0,r=0;j
您必须创建数组并填充它,否则它将使用相同的内存地址,因此无法工作。使用以下命令:

myArray = ArrayUtils.clone(x);

我稍微整理了一下你的代码。根据您所描述的,真正重要的是提取数组中的最小值和最大值——其他所有值都将被删除,因此您只需遍历数组就可以找到这两个值

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    boolean isValid = false;
    int validLength = 0;
    System.out.println("Please enter the array length:");
    while (!isValid) {
        int length = scanner.nextInt();
        if (length < 3) {
            System.out.println("Please make sure array length is greater than two. Try again.");
        }
        else {
            isValid = true;
            validLength = length;
        }
    }
    int minimumValue = Integer.MAX_VALUE, maximumValue = Integer.MIN_VALUE;
    for (int i = 0; i < validLength; i++) {
        System.out.println("Please enter a number for position " + i + ":");
        int nextInt = scanner.nextInt();
        if (nextInt < minimumValue) minimumValue = nextInt;
        else if (nextInt > maximumValue) maximumValue = nextInt;
    }
    System.out.println(Arrays.toString(new int[] {minimumValue, maximumValue}));
}
publicstaticvoidmain(字符串[]args){
扫描仪=新的扫描仪(System.in);
布尔值isValid=false;
int validLength=0;
System.out.println(“请输入数组长度:”);
而(!isValid){
int length=scanner.nextInt();
如果(长度<3){
System.out.println(“请确保数组长度大于2。重试”);
}
否则{
isValid=true;
有效长度=长度;
}
}
int minimumValue=Integer.MAX\u值,maxiumvalue=Integer.MIN\u值;
for(int i=0;imaximumValue)maximumValue=nextInt,则为else;
}
System.out.println(Arrays.toString(新的int[]{minimumValue,maxiumvalue}));
}

编辑:由于不需要使用数组,因此进行了另一次修订。只需在输入最小值和最大值时跟踪它们。

当您执行“myArray=x”时,实际上您只是为数组分配了一个引用。因此,如果对一个数组进行任何更改,它也会反映在其他数组中,因为myArray和x都引用内存中的同一位置

因此,你需要的是

myArray = x.clone();

您对语句
myArray=x
does?
x=newint[myArray.length-1]
这将创建一个新数组并将所有值设置为0,因此您正在删除刚刚填充的结果。试着在循环之前移动它。顺便说一句,我们通常称之为中位数的是排序序列的中间元素。最后的数组应该包含最小值和最大值?@user2740650-我有意这样做,以便每个循环都比myArray小一个,因为没有简单的删除方法元素。谢谢你的提示,我试过了,但它一直说找不到符号。