【问题标题】:Using arrays to get positive numbers使用数组获取正数
【发布时间】:2017-03-06 13:28:15
【问题描述】:

我正在尝试返回数组中的正数。我是数组新手,无法弄清楚。

public class PossitiveArray
{
    public static void main(String[] args) {
     int[] numbers = {2,-1,5,-4,3};
     System.out.print(numbers);

    }
    public static int[] getPositiveNumbers(int[] numbers)
    {

        for (int n : numbers)
        {
            if(n>0)
            {
                int [] nums = numbers;
            }
        }

        return nums;

    }
}

分析- 这就是我想出的。就像现在一样,它给了我一个错误,说我需要为 nums 创建一个局部变量,但是当我这样做时,它返回“[I@677327b6”。我试图让它返回数字,但我不确定在 if 语句中放入什么。

必填- 目标是只返回正数。任何帮助将不胜感激,我对数组和编程非常了解。

【问题讨论】:

  • 鉴于您想要做的事情,int[] nums = numbers; 行没有任何意义。它只是复制整个数组。更好的方法是创建一个本地 ArrayList<int> 并将您想要的数字添加到其中(在 for 循环中)。如果您确实需要将其作为数组返回,请在返回之前调用其toArray 方法。

标签: java arrays if-statement for-loop return


【解决方案1】:

这里有几件事需要考虑来回答您的问题。

  1. nums 的变量范围是循环的本地变量。这意味着 nums 将在每次 for 循环迭代时被删除,并在循环结束时消失。您可以通过将声明移至 for 循环之前来解决此问题。

  2. 您的声明 int[] nums 仅声明 nums 是一个整数数组,但没有分配任何空间来将任何内容放入数组中。您必须使用例如int[] nums = new int[5] 分配空间,这会创建一个包含 5 个插槽的数组。在您的情况下,您需要一个包含所有正数的数组,最多将是整个输入数组。使用int [] nums = new int[numbers.length] 完成此操作(但请参阅下一点)。

  3. 您想如何填充仅包含正整数的新数组 nums?你写它的方式看起来你希望{2,-1,5,-4,3}返回{2, 5, 3},或者你希望它返回{2,0,5,0,3}。任何一种情况都会影响你的 for 循环应该如何处理 nums。对于{2, 5, 3} 的输出,需要通过首先计算正条目的数量来预先计算出数组的大小。

注意:使用链表可以更轻松地解决此问题,其中大小是动态处理的。

这是一个用零替换负数的解决方案。

class PossitiveArray { 
    public static void main(String[] args) 
    { 
        int[] numbers = {2,-1,5,-4,3};
        System.out.print(Arrays.toString(getPositiveNumbers(numbers)));
    } 

   public static int[] getPositiveNumbers(int[] numbers) 
   { 
       int [] nums = new int[numbers.length];
       for(int i = 0; i < numbers.length; i++) 
       { 
         if(numbers[i] > 0) 
         { 
             nums[i] = numbers[i];
         }
         else
         {
             nums[i] = 0;
         }

       } 
       return nums;
    }
 }

【讨论】:

  • 'public class PossitiveArray { public static void main(String[] args) { int[] numbers = {2,-1,5,-4,3}; System.out.print(Arrays.toString(nums)); } public static int[] getPositiveNumbers(int[] numbers) { int [] nums = new int[numbers.length]; for (int n: numbers) { if(n>0) { nums = numbers; } } 返回数字; } }'
  • 对不起,我试图将其发布为代码。我不确定如何在 main 中调用该函数。
  • ` 类 PossitiveArray { public static void main(String[] args) { int[] numbers = {2,-1,5,-4,3}; System.out.print(Arrays.toString(getPositiveNumbers(numbers))); } public static int[] getPositiveNumbers(int[] numbers) { int [] nums = new int[numbers.length]; for(int i = 0; i 0) { nums[i] = numbers[i]; } 其他 { 数字 [i] = 0; } } 返回数字; } }`
【解决方案2】:

使用下面的代码-

public class test
{
    public static void main(String[] args) {
     int[] numbers = {2,-1,5,-4,3};
     for(int n : getPositiveNumbers(numbers)){
         System.out.print(n);    
     }


    }
    public static int[] getPositiveNumbers(int[] numbers)
{
    int count = 0;
     for (int n : numbers)
     {
         if(n>0)
         {
            count++;
         }
     }
    int [] nums = new int[count];
    int i =0;
    for (int n : numbers)
    {
        if(n>0)
        {
           nums[i] = n;
           i++;
        }
    }

    return nums;

}
}

【讨论】:

  • 数组中的所有尾随零怎么办?
  • 其实这是因为声明的数组的大小。如果声明数组大小等于数组中的正数,则后面不会有零。
  • 是的,这行得通,但我如何摆脱零而不是负数。
  • 你是怎么做到的@kushagramittal
【解决方案3】:

Java 8 的流将使这变得更容易:

public static int[] getPositiveNumbers(int[] numbers) {
    return Arrays.stream(numbers).filter(i -> i > 0).toArray();
}

关于打印结果 - 您会看到默认的 toString(),因为 int[] 不会覆盖它。相反,您可以使用Arrays.toString 来打印结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多