我必须创建一个采用两个整数的数组,并生成一个具有相同内容的新数组,但值1的出现次数将替换为两个。有人可以帮助我这是我到目前为止所拥有的。 assertArrayEquals部分出错。
public static replace(int[] in, int find, int replace) {
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
return;
}
}
}
assertArrayEquals(new int[]{5, 5, 5, 5}, Array.replace(new int[]{5, 0, 0, 5}, 0, 5));
答案 0 :(得分:1)
public static void replace(int[] in, int find, int replace) {
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
// do not return; continue to replace other elems
}
}
}
要测试,请使用:
int[] a =new int[]{5, 0, 0, 5};
Array.replace(a, 0, 5);
assertArrayEquals(new int[]{5, 5, 5, 5}, a );
可以使用函数:
public int[] void replace(int[] in, int find, int replace) {
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
// do not return; continue to replace other elems
}
}
return in;
}
现在这应该有效:
assertArrayEquals(new int[]{5, 5, 5, 5}, Array.replace(new int[]{5, 0, 0, 5}, 0, 5));
答案 1 :(得分:0)
尝试删除return
声明
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
}
}
答案 2 :(得分:0)
你从这个功能回来太早了:
for each value 'x' in the input array:
if 'x' is equal to our 'find' value, replace it and return
这里的问题是,只要找到一个匹配值,就可以替换它(好),但是然后返回(坏)。如果输入数组中有两个或多个匹配值,则仅替换第一个匹配值。这是一个简单的解决方法,只需删除该返回语句:
public static void replace(int[] in, int find, int replace) {
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
}
}
}
答案 3 :(得分:0)
我认为如果您删除return;
行,那么该程序将正常工作。 return
将导致该方法立即停止。因此,您的代码不起作用的原因是该方法在检查第一项后停止。另外,请记住在方法中添加int[]
的返回类型:
public static int[] replace(int[] in, int find, int replace) {
for (int i = 0; i < in.length; i++) {
if (in[i] == find) {
in[i] = replace;
}
}
return in;
}
但是,这是使用新Stream API的替代解决方案:
public static int[] replace(int[] in, int find, int replace) {
return Arrays.stream(in).map(x -> x == find ? replace : x).toArray();
}