2014-12-24 2 views
2

Я пытаюсь создать простой метод перемещения первого элемента в массиве в обратную сторону массива.Метод перемещения элемента в массиве

Вот мой код

public class Ex5_ShiftLeft {  
    public static void main(String[] args) { 
    int[] a = new int[] {6, 2, 5, 3}; 
    swap (a); 

    } 

    public static void swap(int[] array){ 
     array[0] = array[array.length]; 
     System.out.println(Arrays.toString(array)); 
    } 
} 

Eclipse, как представляется, не обнаружить ошибку с моим кодом, но когда я запускаю его, я получаю текст ошибки

«Исключение в потоке» основной "java.lang.ArrayIndexOutOfBoundsException: 4 на apollo.exercises.ch04_loops.Ex5_ShiftLeft.swap (Ex5_ShiftLeft.java:19) на apollo.exercises.ch04_loops.Ex5_ShiftLeft.main (Ex5_ShiftLeft.java:1)"

Любые советы?

+0

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – Tom

ответ

2

Массивы представляют собой сегмент памяти, который ваша программа зарезервировала для хранения ряда чисел или всего, что у вас есть в вашем массиве. Из-за этого массивы не могут быть изменены; вы не можете пройти за конец сегмента памяти, который вы зарезервировали, потому что другая программа может использовать эту память. Ваше решение не работает, потому что оно пытается взять первый элемент и поместить его после конца массива, что выходит за рамки. Вместо этого вы должны помнить первый элемент, а затем перемещать каждый элемент, кроме первого места влево, чтобы создать комнату в конце массива, а затем вы можете поместить первый элемент в конец массива.

-1

Ошибка из-линии:

массив [0] = массив [array.length];

Если вы хотите получить доступ к последнему элементу массива и заполнить его в массив [0], а затем используйте ниже

массив [0] = Array [array.length-1];

+0

Исправить, но не решает проблему, как он описал в письменной форме. – Vitruvius

0

Размер массива в основном статический. Для этого вы можете использовать динамический динамик ArrayList.

-1

Используйте array[0] = array[array.length - 1]; для доступа к последнему элементу в Array.

+0

Правильно, но не решает проблему, как он описал в письменной форме. – Vitruvius

2

Я принимаю это как вы новичок, поэтому я скажу, что просто держитесь за него, и вы наверняка улучшаетесь. Я улучшил свой код ниже для вас:

public class Ex5_ShiftLeft {  
    public static void main(String[] args) { 
    int[] a = {6, 2, 5, 3}; 
    swap (a); 
} 

public static void swap(int[] array){ 
    int temp = array[0] 
    array[0] = array[array.length-1]; 
    array[array.length-1] 

    for(int x : array){ 
     System.out.println(x+" "); 
    } 
    } 
} 

ИЗМЕНЕНИЙ: Вы можете объявить массив только с этим: ИНТ [] туАггау = {6,2,5,3};

У вас возникла проблема с вашей функцией подкачки. Вы должны создать временную переменную, чтобы вы могли поменять первый элемент массива на last.Also, последний элемент массива - массив [array.length-1]

Во-вторых, я использовал Enhanced For- loop, чтобы распечатать массив. Надеюсь, это поможет

+0

К сожалению, последней частью функции swap должен быть массив [array.length-1] = temp; – sparrow

+0

Спасибо, человек!Могу ли я спросить, почему мы должны создать временную переменную? Не является ли массив [0] переменной самостоятельно? –

+1

Если вы берете первый элемент и говорите, что это последний элемент, где вы получите последний элемент, чтобы сказать, что теперь это первый элемент. Вы должны сохранить его во временном месте, получить его и сказать, что теперь это первый элемент – sparrow

Смежные вопросы