2010-10-01 3 views
0

Для массива a и двух других переменных int, k и temp, напишите цикл, который обращает элементы массива.Обратные элементы массива

for (k = 0; k < a.length-1; k++) { 
    temp = a[k]; 
    a[k] = a[a.length-1-k]; 
    a[a.length-1-k] = temp; 
} 

Это не работает. Любая идея почему?

+3

Это будет отличный цикл пошагово с помощью отладчика. – Pops

+0

Можете ли вы добавить вывод, чтобы показать, что он делает? – Zoe

ответ

7

Е.Г., для a = [0, 1, 2, 3, 4, 5] вы будете переключаться 0 и 5 дважды: когда i == 0 и когда i == 5. Это двойное переключение поставит оба элемента в исходное положение: (0, 5) -> (5, 0) -> (0, 5).

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

+0

О, хорошо, что работает .. спасибо! – Snowman

+1

IMO, когда вопрос помечен как «домашнее задание», вы не должны слишком легко отдать это. – gawi

+0

@ gawi Да, наверное, лучше было опустить последний абзац.Но я поспешил выложить первый ответ :) –

0

Вы меняете элементы с каждого конца массива ... и повторяете элементы, которые вы уже поменяли ... это достаточно намека?

1

Вам необходимо остановить свою петлю на a.length/2 (посередине).

for(k=0;k<a.length/2;k++) 

Это должно работать для нечетных и четных массивов, если это целочисленное деление.

+0

Согласен. В противном случае массив будет обращен дважды в начало. –

0

Возможно, вы также захотите посмотреть на метод ArrayUtils.reverse.

Here - пример использования этого метода.

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

0

Это будет работать

int a[] = {1,2,3,4,5}; 
     for (int k = 0; k < a.length/2; k++) { 
      int temp = a[k]; 
      a[k] = a[a.length-(1+k)]; 
      a[a.length-(1+k)] = temp; 
      } 
-1

проверить это на моем блоге надежде, что это поможет http://codeheaven.wordpress.com/

Вот код из выше ссылке:

public class ArrayReversing { 
public static void main(String a[]){ 
int arr[]={ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }; 
int temp; 
int as = arr.length; 
int k = as – 1; 

System.out.println(“Array Before Reversing”); 
printArray(arr);//method used to print array on screen 

ArrayReverse://using loops with title 
for(int i = 0; i < arr.length/2 ; i++){ 
temp = arr[k];// swaping 
arr[k] = arr[i]; 
arr[i] = temp; 

k–; 
} 
System.out.println(“Array After Reversing”); 
printArray(arr); // calling the method printArray to print the elements of array 
} 

static void printArray(int ar[]){ 
PrintArray: 
for(int l:ar) 
System.out.println(l); 
} 

} 

Выход:

Array Before Reversing 
1 
2 
3 
4 
5 
6 
7 
8 
Array After Reversing 
8 
7 
6 
5 
4 
3 
2 
1 
1

Использование стека. Стек меняет элементы, которые добавляются к нему. Стек может быть описана как First In, Last Out (FILO). «Push» добавляет элементы в стек, и «Pop» удаляет их.

public static int[] num1 = {1,2,3,4,5,6}; 
public static Stack<Integer> stack = new Stack<Integer>(); 

public static void main(String[] args) { 

    for(int i = 0; i < num1.length; i++){ 
     stack.push(num1[i]); 
    } 

    for(int i = 0; i < num1.length; i++){ 
     System.out.print(stack.pop()); 
    } 

} 

Выход:

654321 
0

Попробуйте это будет просто работать:

public class ReverseArray{ 
    public static void main(String[] args){ 
     int[] a ={1,2,3,4,5}; 
     for(int i=a.length-1;i>=0;i--){ 
      System.out.print(a[i]); 
     } 
    } 
} 
+0

Хотя это может ответить на вопрос, лучше объяснить основные части ответа и, возможно, в чем проблема с кодом OPs. – pirho

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