如何在 java 中剪切数组的一部分

How can I cut a section of an array in java

我必须在 java 中编写一个方法,其中输入一个数字数组 "a" 和一个数字 "x" returns 一个元素数组,它跟在最后一次出现之后"a" 中的 "x "。例如 对于输入 {0,1,2,3,4,5,6,7,8,9} 和 x=6,方法必须 return {7,8,9} 同时使用 {4,1,4 ,2} 和 x =4 该方法必须 return {2} 并且如果 x 不在 "a" 中则它必须 return 空数组 {} (或长度为 0 的数组)

到目前为止我们还没有研究类或对象。这里是我们到目前为止制作的另一个程序的示例

boolean arrayIncluso( int[] s,int[] t ) {

boolean flag=true;
for(int i=0;i< s.length;i++){
    int c1 = 0 ;
int c2 = 0 ;
    for(int j=0;j< s.length;j++){
        if(s[i] == s[j]){
            c1 ++;
        }
    }

    for(int j=0;j< t.length;j++){
        if(s[i] == t[j]){
            c2 ++;
        }
    }

    if(c1 > c2)

    flag= false; 
}
return flag;
}

谁能给我解释一下 为什么这个

t[i-idx-1 ] = s[i];

而不是这个

     for(int j=0;j<t.length;j++){
     t[j]=a[i];
}
return t;

您可以将问题分为两部分:

  1. 查找字符 x 的最后一个索引。这可以使用简单的 for 循环来完成。

    int idx = -1;
    for (int i = 0; i < s.length; i++) { 
        if (s[i] == x) idx = i;
    }
    
  2. 找到这个索引后,从这个元素开始创建一个新数组。它可以用第二个(不是嵌套的)for 循环来完成,或者你可以使用 Arrays.copyOfRange()

    //make sure idx != -1
    int[] t = new int[s.length - idx - 1];
    for (int i = idx+1; i < s.length; i++)
        t[i-idx-1 ] = s[i];
    System.out.println(Arrays.toString(t)); //print to make sure it's all fine
    

    t = Arrays.copyOfRange(s, idx+1, s.length);
    System.out.println(Arrays.toString(t));

这是一个通用算法:(你必须自己编码)

  1. 运行通过数组a跟踪当前索引号x。调用此索引 e.g.lastOccurance.
  2. Return lastOccurance + 1 之后的数组。

不要忘记检查没有出现以及最后一次出现是否是数组的末尾。

使用列表:

int pos = a.lastIndexOf(x);
List<Integer> result = null;
if(pos > -1)
   result = a.subList(pos+1, a.size());

您可以使用 Arrays:

从数组构建列表
Integer [] array = new Integer[3];
...
...
List<Integer> a = Arrays.asList(array);

总共会产生如下代码:

List<Integer> a = Arrays.asList(array);
int pos = a.lastIndexOf(x);
int [] result = null;
if(pos > -1) {
    List<Integer> sl = a.subList(pos+1, a.size());
    result = new int[sl.size()];
    for(int i = 0; i < sl.size(); i++)
        result[i] = sl.get(i);
}

您可以使用 commons lang 库来通过方法 ArrayUtils.lastIndexOf 确定数组元素的最后一个索引,这样它就变成了一行:

int[] t = Arrays.copyOfRange(s, ArrayUtils.lastIndexOf(s, x) + 1, s.length);