有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我必须用java编写一个方法,其中输入一个数字数组“a”和一个数字“x”,返回一个元素数组,该数组位于“a”中最后一个字母“x”之后。例如 对于输入{0,1,2,3,4,5,6,7,8,9}和x=6,方法必须返回{7,8,9},同时对于{4,1,4,2}和x=4,方法必须返回{2},如果x不在“a”中,则必须返回空数组{}(或长度为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;

共 (4) 个答案

  1. # 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);
    }
    
  2. # 2 楼答案

    这里有一个通用算法:(您必须自己编写)

    1. 在数组中运行a,跟踪数字x的当前索引。调用此索引,例如lastOccurance
    2. 从lastOccurance+1开始返回数组

    不要忘记检查是否没有发生以及最后一次发生是否为数组末尾

  3. # 3 楼答案

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

    1. 查找字符x的最后一个索引。这可以使用easy 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));
    
  4. # 4 楼答案

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

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