【问题标题】:Java - Return an array from array with two given indexesJava - 从具有两个给定索引的数组中返回一个数组
【发布时间】:2014-02-09 03:51:40
【问题描述】:

假设我有一个数组:

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

有了两个索引(比如说2 和5),我希望能够从上面给出的变量values 中的索引2 到5 返回数组。最终的输出应该是这样的:

newValues[] = {3, 4, 5, 6};

另外,这个过程如何与多维数组一起使用?

我会用谷歌搜索这个,但我不确定要搜索什么,所以我来到这里。

【问题讨论】:

标签: java arrays indexing


【解决方案1】:

使用java.util Arrays 类。使用copyOfRange(int[] original, int from, int to)方法:

newValues[] = Arrays.copyOfRange(values, 2, 6);

【讨论】:

  • 虽然这对于单维数组来说工作得很好,但这并不能回答问题的多维部分。
  • 我同意。但是,每个多维数组都可以转换为一维数组并使用此函数进行转换。
【解决方案2】:

试试下面的

public static void main(String[] args)
{
    int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

    int start = 2, end = 5; // Index
    int[] newValues = new int[end - start + 1]; // Create new array

    for (int i = start; i <= end; i++) {
        newValues[i - start] = values[i]; // Assign values
    }

    // Print newValues
    for (int v : newValues) {
        System.out.print(v + " ");
    }
}

输出:

3 4 5 6

【讨论】:

  • wat abt 多维数组?
【解决方案3】:

对二维数组尝试以下操作:

public int[][] getRange(int[][] src, int x, int y, int x2, int y2) {
    int[][] ret = new int[x2-x+1][y2-y+1];
    for(int i = 0; i <= x2-x; i++)
        for(int j = 0; j <= y2-y; j++)
            ret[i][j] = src[x+i][y+j];
    return ret;
}

对于一维数组,Arrays.copyOfRange() 应该没问题,对于更多维度,您只需添加更多参数和for 循环

【讨论】:

  • 这正是我想要的。我会标记这是正确的,但我正在寻找更“内置”的东西。你知道多维数组是否有相当于Arrays.copyOfRange()的东西?
【解决方案4】:

您可以使用以下内容:

int[] values = {1, 2, 3, 4, 5, 6, 7 , 8, 9, 0}; int newValues[] = new int[4]; System.arraycopy(values,1,newValues,0,4)

这是完整的代码:

public class CopyRange {    
  public static void main (String...args){
     int[] values = {1, 2, 3, 4, 5, 6, 7 , 8, 9, 0};
     int newValues[] = new int[4];

     System.arraycopy(values,1,newValues,0,4);

     for (int i =0;i <newValues.length;i++)
        System.out.print(newValues[i] + " ");
     }
}

System 类有一个 arraycopy 方法,您可以使用该方法有效地将数据从一个数组复制到另一个数组:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2016-01-20
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多