删除和替换阵列

时间:2011-12-02 06:44:27

标签: java arrays

基本上,我得到了一系列数字,我必须计算所有负数。 然后创建一个包含前一个正数的新数组,数组的长度为firstarray-numberOfNegatives

这是我的代码:

public void removeNegatives()
  {

      int numberOfNegative = 0;
      for(int i = 0; i < numbers.length-1; i++)
      {
            if (numbers[i] < 0) numberOfNegative++;
      }
      int [] numbers2 = new int[numbers.length-numberOfNegative];
      int count = 0;
      for(int i = 0; i < numbers2.length; i++)
      {
          if (numbers[count] > 0) numbers2[i] = numbers[count];
          count++;
          System.out.println(numbers2[i]);
      }
      numbers = numbers2;
  }

我收到了错误的结果:负数被替换为0

6 个答案:

答案 0 :(得分:1)

首先写i < numbers.length;i <= numbers.length-1;而不是i < numbers.length-1;
然后修复代码。 另请注意,您的'numbers'数组中可以有零,因此在if()in first()中,你应该写&lt; = 0而不是&lt; 0

for(int i = 0; i < numbers.length; i++)
  {
      if (numbers[i] > 0) numbers2[count] = numbers[i];
      count++;
      System.out.println(numbers2[count-1]);
  }

答案 1 :(得分:1)

首先:你的第一个for循环中有一个off-by-one错误。在脑袋或纸上浏览一些小的示例阵列,你会看到。

其次:我认为你在第二部分中使用了两个索引计数器。 count应该在您的新数组中使用,i在旧数组中使用。

答案 2 :(得分:1)

  public void removeNegatives()
  {

      int numberOfNegative = 0;
      for(int i = 0; i < numbers.length; i++) // 
      {
            if (numbers[i] < 0) numberOfNegative++;
      }
      int [] numbers2 = new int[numbers.length-numberOfNegative];
      int count = 0;
      for(int i = 0; i < numbers.length; i++)
      {
          if (numbers[i] >= 0) numbers2[count++] = numbers[i]; //
      }
      numbers = numbers2;
  }

答案 3 :(得分:0)

需要在第二遍中反转您的索引变量。第一个循环还有长度-1而不是长度第二个循环应该超过原始数组的全长而不是结果数组。

public void removeNegatives()
{
  int numberOfNegative = 0;
  for(int i = 0; i < numbers.length; i++)
    if (numbers[i] < 0)
      numberOfNegative++;
  int [] numbers2 = new int[numbers.length-numberOfNegative];
  int count = 0;
  for(int i = 0; i < numbers.length; i++)
  {
      if (numbers[i] >= 0) {
          numbers2[count] = numbers[i];
          System.out.println(numbers2[count]);
          count++;
      }
  }
  numbers = numbers2;
}

答案 4 :(得分:0)

运行调试器并观察此行... -1是可疑的

for(int i = 0; i < numbers.length-1; i++)

:)

答案 5 :(得分:0)

for(int i = 0; i < numbers2.length; i++)
  {
      if (numbers[count] > 0) numbers2[i] = numbers[count];
      count++;
      System.out.println(numbers2[i]);
  }
  numbers = numbers2;

}

您正在迭代多次,因为数字2有位置,但是,无论您是否为正数提供资金,您都会在每次传递(在for循环中)中增加i。因此,你的输出arrray会有第一个number2.length正整数的数字与一堆0交错!