【问题标题】:How do I get the array method to give me the correct output?如何让数组方法给我正确的输出?
【发布时间】:2012-01-21 21:38:50
【问题描述】:

我正在尝试创建一个方法,该方法需要一个 int 数组和两个 int S1int S2 作为参数。整数表示参数数组中子数组的起始位置和结束位置。该方法返回一个新数组,其中包含从起始位置到结束位置的元素。

这就是我所拥有的,但它不断给我这个信息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at testing.subArray(testing.java:14)
    at testing.main(testing.java:9)

代码如下:

public class testing{

public static void main(String args[])
{
int[] firstArray = {8,9,10,11,12,13};
subArray(firstArray, 2, 4);
}

public static void subArray(int[]originalArray, int S1, int S2)
{
int[] copy = new int[3];
System.arraycopy(originalArray, S1, copy, S2, 2);

for (int i = 0; i < copy.length; i++){
        System.out.println(copy[i]);}
}

}

请帮忙! :)

【问题讨论】:

    标签: java arrays methods


    【解决方案1】:

    该方法返回一个新数组,其中包含从起始位置到结束位置的元素。

    目前它不返回任何东西(这是一个void 方法)。但是,如果您想让您的工作尽可能轻松,您可以使用Arrays.copyOfRange()

    关于你当前的代码,这里有一些提示:

    1. 为什么总是为copy 分配三个元素?数组的大小应该取决于S1S2
    2. arraycopy() 的参数完全错误。阅读 Java 文档的相关部分并找出正确的值。

    【讨论】:

    • Eeek,对不起......我是初学者......只有大约一个学期。我会努力的,谢谢
    • 我按照你说的做了,但它说找不到符号“数组”。 public static void main(String args[]) { int[] firstArray = {8,9,10,11,12,13}; subArray(firstArray, 2, 4); } public static void subArray(int[]originalArray, int S, int E) { int[]copy = Arrays.copyOfRange(originalArray,S,E); for (int i = 0; i &lt; copy.length; i++){ System.out.println(copy[i]);} }
    • @pearbear:这看起来好多了。请注意,copyOfRange() 不会复制结束元素 (E)——您可能需要对此进行调整。
    【解决方案2】:

    你会发现这样效果更好:

    public class testing {
    
        public static final int DEFAULT_LENGTH = 3;
    
        public static void main(String args[]) {
            int[] firstArray = {8, 9, 10, 11, 12, 13};
            int [] subArray = createSubArray(firstArray, 2, 4);
            for (int i = 0; i < subArray.length; i++) {
                System.out.println(subArray[i]);
            }
        }
    
        public static int [] createSubArray(int[] originalArray, int startPosition1, int valuesToCopy) {
            int subArrayLength = Math.min((originalArray.length-startPosition1), valuesToCopy);
            int [] subArray = new int[subArrayLength];
            System.arraycopy(originalArray, startPosition1, subArray, 0, subArrayLength);
    
            return subArray;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多