При необходимости одну переменную массива можно скопировать в другую, но в этому случае обе переменные будут ссылаться на один и тот же массив.
int[] luckyNumbers = smallPrimes; |
|
luckyNumbers[5] = 12; // smallPrimes[5] 12. |
Результат копирования переменных массивов показан на рис.1.
Рис.1. Копирование переменной массива
Если необходимо скопировать все элементы одного массива в другой, следует использовать метод copyTo() из класса Arrays. Его вызов выглядит следующим образом:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length); |
Вторым параметром является длина нового массива. Обычно этот метод применяется для увеличения размера массива:
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length); |
Дополнительные элементы заполняются нулями, если массив содержит числа, и false - если значения типа boolean. В противоположность этому, если длина нового массива меньше длины исходного, то копируются только начальные элементы.
До появления Java SE 6 для копирования элементов массива использовался метод arrayCopy класса System. Синтаксис этого вызова выглядит следующим образом:
System.arrayCopy(from, fromIndex, to, toIndex, count); |
Массив to должен иметь достаточный размер, чтобы в нем уместились все копируемые элементы.
Ниже приведен фрагмент кода, результаты которого показаны на рис.2. Вначале создаются два массива, а затем последние четыре элемента первого массива копируются во второй. Копирование исходного массива начинается с элемента с номером 2, а в целевой массив копируемые данные помещаются, начиная с элемента с номером 3.
int[] smallPrimes = {2, 3, 5, 7, 11, 13}; |
|
int[] luckyNumbers = {1001, 1002, 1003, 1004, 1005, 1006, 1007}; |
|
System.arrayCopy(smallPrimes, 2, luckyNumbers, 3, 4); |
|
for(int i = 0; i<luckyNumbers.length; i++) |
|
System.out.println(i + ": " + luckyNumbers[i]); |
Выполнение данного фрагмента приводит к следующему результату:
0: 1001 |
|
1: 1002 |
|
2: 1003 |
|
4: 5 |
|
5: 7 |
|
6: 11 |
|
7: 13 |
Рис.2. Копирование элементов массива.
Массив в языке Java значительно отличается от массива в C++, располагающегося в стеке. Однако переменную массива можно условно сравнить с указателем на динамически созданный массив. Таким образом, выражение Java:
int[] a = new int[100]; // Java |
можно сравнить с выражением C++
int* a = new int[100]; // ++ |
но оно существенно отличается от следующего:
int a[100]; // C++ |
В языке Java операция [] по умолчанию проверяет диапазон изменения индексов. Кроме того, в языке Java не поддерживается арифметика указателей - нельзя увеличить указатель a, чтобы обратиться к следующему элементу массива.
Добрый день! Совершенно случайно (может и не случайно, ведь информацию-то искал по Java) наткнулся на этот сайт. Даже с первого взгляда могу сказать: “Впечатляет!”. Не люблю модное словечко “круто!”, но это реально хорошо и доходчиво. Вот только не нашёл где бы можно было вопрос задать. Я же пока что не java-программист, даже не заготовка… Только-только начал учить. И вот уже несколько дней пытаюсь понять, как бы передавать значения из одного массива в другие (полностью или выборочно). Вот такую конструкцию сделал:
import java.util.*;
public class ScoolMassive {
public int oneArray[] = new int[15];
public void createArray(){
System.out.print(“Исходный массив:\n”);
for(int i = 0; i < oneArray.length; i++){
oneArray[i] = (int) (Math.random() * 100 – Math.random() * 10);
System.out.print(oneArray[i] + " ");
}
System.out.print("\n");
}
public void minTOmax(){
System.out.print("Массив, отсортированный от меньшего к большему:\n");
int[] arr_01;
arr_01 = oneArray;
Arrays.sort(arr_01);
for(int j = 0; j < arr_01.length; j++){
System.out.print(arr_01[j] + " ");
}
System.out.print("\n");
}
}
но во втором случае выдаёт только нули. Чего-то я не пойму в чём заморочка, а посоветоваться не с кем. Нету пока что знакомых программистов. Может подскажете, в каком месте заморочка? Чего тут не так?
Заранее благодарен, Александр.
:))))))))))))))))
“Ваш звонок очень важен для нас… Оставайтесь на линии”
Рано похвалил
Перед візовом второго метода вызови первый.
Иначе массив oneArray не инициализирован, тоесть заполнен нулями.