【问题标题】:java return array in methodjava在方法中返回数组
【发布时间】:2015-12-07 16:40:17
【问题描述】:

我在 java 中做我的第一步,所以我的问题很简单——我有一个包含 8 个整数的数组,我想返回一个包含原始数组中奇数索引元素的数组。方法减速有什么问题?任何其他实施技巧将不胜感激。

P.S - 我知道我不必在这里使用方法,它只是为了练习。

package com.tau;

public class Main {


    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};


        System.out.println("1.e odd index numbers in array : " + oddIndex(arr));

        int j = 0;
        public static int[] oddIndex(int[] array){
            int newArrSize = array.length;
            if ((newArrSize % 2) != 0) {
                newArrSize--;
            }

            int[] newArr = new int[newArrSize];

            for (int i = 0; i < array.length; i++)
                if ((array[i] % 2) == 0) {
                    newArr[j] = array[i];
                    j++;
                }
            return newArr;

      }
    }


} 

【问题讨论】:

  • 你不能在另一个方法中声明一个方法。
  • 此方法将返回奇数元素,而不是奇数索引元素
  • 如果您返回奇数索引元素,您将拥有大约 一半 的元素数量。
  • 查看每个第二个元素,请执行i += 2
  • 令人困惑的是,您的奇数索引元素有偶数。即 arr[1] == 2

标签: java arrays methods


【解决方案1】:
  1. 不能在方法中编写方法。

  2. 您正在创建一个 newArr 命名数组。这个数组的大小是给你的。如果使数组动态化,则内存使用量会更少。对于动态数组,您必须使用 ArrayList。

  3. 为了检查奇数索引,直接在 for 循环中给出 i=1 然后递增 +2 的值。那么索引将是 1,3,5...您不必为此做那么多计算。

    import java.util.ArrayList;
    
    public class ReturnArray 
    {
        public static void main(String[] args) 
        {
            int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
            System.out.println("Odd index numbers in array : " + oddIndex(arr));            
        }
    
        public static ArrayList<Integer> oddIndex(int[] array)
        {
            ArrayList<Integer> al = new ArrayList<Integer>();
            for (int i = 1; i < array.length; i+=2)
                al.add(array[i]);
            return al;
        }
    }
    

输出:

Odd index numbers in array : [2, 4, 6, 8]

【讨论】:

    【解决方案2】:

    您的代码有问题:

    • 您不能在另一个方法中定义方法。
    • 如果要返回一个包含原始数组中奇数索引元素的数组。您应该检查 index%2!=0 而不是检查该索引的数组值。

    试试这个

    public class Main {
          public static void main(String[] args) {
             int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
             System.out.println("1.e odd index numbers in array : " +  Arrays.toString(oddIndex(arr)));
    
        }
    
    
    
         public static int[] oddIndex(int[] array){
    
             int[] newArr = new int[array.length];
             int j=0;
             for (int i = 0; i < array.length; i++){
                 if ((i % 2) != 0) {
                     newArr[j++] = array[i];
    
                 }
             }
             return Arrays.copyOf(newArr, j);
        }
     }
    

    输出:

    1.e odd index numbers in array : [2, 4, 6, 8] // odd index elements from original array
    

    【讨论】:

    • 为什么更喜欢返回 Arrays.copyOf(newArr, j) 并打印 Arrays.toString(oddIndex(arr)) 而不是返回 newArr 并打印oddIndex(arr),有什么特殊原因吗?
    • 这是因为 newArr 的大小与原始数组的大小相同。所以只需修剪尺寸。
    • 您可以将newArr优化为int[] newArr = new int[array.length/2];,然后简单地返回newArr。由于奇数索引元素的大小将是原始数组大小的一半。
    • Arrays.toString(oddIndex(arr) 用于将元素打印为字符串,否则打印arr 将仅打印arr 的引用地址。
    【解决方案3】:

    1)Java 中的方法内不能有方法。将您的 oddIndex() 方法移到 main() 方法之外。

    2) 你不能在另一个方法中使用一个方法的局部变量。所以我将你的变量 j 移动到 oddIndex() 方法

    public class Main {
    
        public static void main(String[] args) {
    
            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
    
            System.out.println("1.e odd index numbers in array : " + oddIndex(arr));
    
        }
    
        public static int[] oddIndex(int[] array) {
            int j = 0;
            int newArrSize = array.length;
            if ((newArrSize % 2) != 0) {
                newArrSize--;
            }
    
            int[] newArr = new int[newArrSize];
    
            for (int i = 0; i < array.length; i++)
                if ((array[i] % 2) == 0) {
                    newArr[j] = array[i];
                    j++;
                }
            return newArr;
    
        }
    
    }
    

    而且,正如 Jhamon 评论的那样,您的方法名称和内部逻辑不匹配。 奇数索引!=奇数

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 2021-12-21
      • 2011-09-14
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多