2014-04-07 4 views
-4

Мне нужна помощь с одним из моих методов, который удлиняет массив. Поэтому, если массив ABC, я хочу, чтобы метод void делал его AABBCC. Вот мой код до сих пор:Java Arrays увеличивается

public void lengthen(){ 
    double[]t = new double[samples.length]; 

    for(int i = 0;i<samples.length;i++){ 
     t[i] = samples[i]; 
    } 
    samples = new double[t.length*2]; 
    for(int i = 0; i < samples.length;i++){ 
     samples[(2*i)] = t[i]; 
     samples[(2*i)+1] = t[i]; 
    } 
} 
+1

Так? Пробовали ли вы его проверить, работает ли это? – noobProgrammer

+1

И ваш вопрос? – EJP

+1

Кажется, домашнее задание –

ответ

0

Вы хотите второй массив только приращение к максимуму i/2, как вы заполняете два элемента массива в теле цикла.

0

Вашей проблема в том, что ваш цикле повторяется над индексами двукратно размером массива и использует его для индекса массива одиночно размера, следовательно, вы недоступное исключения.

Это можно сделать довольно просто с чем-то вроде:

public void lengthen() { 
    // Create new array, twice as many elements. 

    double [] t = new double[samples.length * 2]; 

    // Transfers the elements, n -> 2n, 2n+1, n ranging from 0 to N-1 inclusive. 

    for (int i = 0; i < samples.length; i++) { 
     t[i*2] = samples[i]; // 0->0, 1->2, 2->4, ..., (N-1)->(2N-2). 
     t[i*2+1] = samples[i]; // 0->1, 1->3, 2->5, ..., (N-1)->(2N-1). 
    } 

    // Load into member variable. 

    samples = t; 
}