【问题标题】:Trying to only print specific numbers in this Array Method尝试仅在此数组方法中打印特定数字
【发布时间】:2021-12-05 04:23:23
【问题描述】:

由于某种原因,我只管理了打印奇数,但它仍然以某种方式打印看似为空的值。我试图只打印返回为奇数的值。

public class Odd {

    public int[] removeEvens(int [] nums) {  //start of method
           
        int [] newArray = new int[nums.length];
        
        int count = 0;
        
        // start of array conversion
        for(int i = 0; i < nums.length; i++) {
                    
            newArray[count] = nums[i];
            count++;
            
            }
        
        int counter = 0;
        for (int i = 0; i < nums.length; i++) 
            if (newArray[i] % 2 == 1)
                newArray[counter++] = newArray[i];
        for (int i=counter; i < nums.length; i++)
            newArray[i] = 0;  
        
          
                    
    return newArray;    
    }
        // end of method 

    public static void main(String[] args) {
        Odd labObject = new Odd();
          int [] input = {1,2,3,4,5,6,7,8,9};
          int [] result = labObject.removeEvens(input);
          
          // Helper method Arrays.toString() converts int[] to a String
          System.out.println(Arrays.toString(result)); // Should print [1, 3, 5, 7, 9]

    }

}

【问题讨论】:

    标签: java arrays methods


    【解决方案1】:

    将其更改为return Arrays.copyOfRange(newArray, 0, counter);,当您在 java 中创建具有指定大小的整数数组时,它会将数组中的每个值设置为 0。这样做将删除最后所有无关的 0。

    【讨论】:

    • 也可以是return Arrays.copyOfRange(newArray, 0, counter-1);。两个都试,一个就可以了
    【解决方案2】:

    这可以通过在创建新数组之前先计算出正确大小来轻松解决。然后简单地循环数组并只存储奇数。否则,在返回之前删除/修剪数组大小。

    这里是通过修改您的removeEvens 方法的解决方案:

    public int[] removeEvens(int[] nums)
    {  //start of method
    
        int count = 0;
    
        // start of array conversion
        // Count the odd numbers to work out the array length
        for (int i = 0; i < nums.length; i++)
        {
            if (nums[i] % 2 == 1 || nums[i] % 2 == -1)
            {
                count++;
            }
        }
    
        // Now create a new array of the correct length
        int[] newArray = new int[count];
    
        // Now loop through the original array and only store the odd numbers in the new array
        int counter = 0;
        for (int i = 0; i < nums.length; i++)
        {
            if (nums[i] % 2 == 1 || nums[i] % 2 == -1)
            {
                newArray[counter] = nums[i];
                counter ++;
            }
        }
    
        // Return the result
        return newArray;
    }
    

    结果:

    [1, 3, 5, 7, 9]
    

    【讨论】:

    • 练习需要在不修改方法的情况下完成。换句话说,我需要专注于修改方法本身。
    • @Jake 没看懂,是吗,还是不需要修改方法?当前removeEvens 方法中的一半代码是没有意义的。
    • So sori,这是一个练习,因为我是一名学生。我相信这毫无意义,所以我会更好地向你解释,希望你能给我反馈。测试程序将测试不同范围的数字。但它只需要返回这些范围内的奇数。所以当 nums 是 [1, 2, 3, 4, 5, 6, 7, 8, 9] 时,首先测试一个范围,例如 [1, 9, 3] 或 [1, 4, 6, 7, 9]等,该方法不仅需要调整范围的大小,还需要返回奇数等。
    • @Jake 我的答案中的代码完全符合您的要求。它将返回一个只有奇数的正确长度的数组,并且它适用于您传递给该方法的任何数组。我只展示了代码的removeEvens 部分,因为其余部分没有改变。
    • 我忘了提到sorifiend,它确实解决了这个问题,但它也需要修改为也返回负数。你能帮我修改一下代码吗!
    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2017-03-13
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多