通过替换int来创建数组

时间:2017-03-19 05:59:01

标签: java

我必须创建一个采用两个整数的数组,并生成一个具有相同内容的新数组,但值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));

4 个答案:

答案 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();
}