如何在 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;
您可以将问题分为两部分:
查找字符 x
的最后一个索引。这可以使用简单的 for 循环来完成。
int idx = -1;
for (int i = 0; i < s.length; i++) {
if (s[i] == x) idx = i;
}
找到这个索引后,从这个元素开始创建一个新数组。它可以用第二个(不是嵌套的)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));
这是一个通用算法:(你必须自己编码)
- 运行通过数组a跟踪当前索引号x。调用此索引 e.g.lastOccurance.
- 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);
我必须在 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;
您可以将问题分为两部分:
查找字符
x
的最后一个索引。这可以使用简单的 for 循环来完成。int idx = -1; for (int i = 0; i < s.length; i++) { if (s[i] == x) idx = i; }
找到这个索引后,从这个元素开始创建一个新数组。它可以用第二个(不是嵌套的)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));
这是一个通用算法:(你必须自己编码)
- 运行通过数组a跟踪当前索引号x。调用此索引 e.g.lastOccurance.
- 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);