How do I reverse an int array in Java?

前端 未结 30 2965
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-21 07:18

I am trying to reverse an int array in Java.

This method does not reverse the array.

for(int i = 0; i < validData.length; i++)
{
    int temp =          


        
30条回答
  •  半阙折子戏
    2020-11-21 08:08

    Here is a simple implementation, to reverse array of any type, plus full/partial support.

    import java.util.logging.Logger;
    
    public final class ArrayReverser {
     private static final Logger LOGGER = Logger.getLogger(ArrayReverser.class.getName());
    
     private ArrayReverser () {
    
     }
    
     public static  void reverse(T[] seed) {
        reverse(seed, 0, seed.length);
     }
    
     public static  void reverse(T[] seed, int startIndexInclusive, int endIndexExclusive) {
        if (seed == null || seed.length == 0) {
            LOGGER.warning("Nothing to rotate");
        }
        int start = startIndexInclusive < 0 ? 0 : startIndexInclusive;
        int end = Math.min(seed.length, endIndexExclusive) - 1;
        while (start < end) {
            swap(seed, start, end);
            start++;
            end--;
        }
    }
    
     private static  void swap(T[] seed, int start, int end) {
        T temp =  seed[start];
        seed[start] = seed[end];
        seed[end] = temp;
     }  
    
    }
    

    Here is the corresponding Unit Test

    import static org.hamcrest.CoreMatchers.is;
    import static org.junit.Assert.assertThat;
    
    import org.junit.Before;
    import org.junit.Test;
    
    public class ArrayReverserTest {
    private Integer[] seed;
    
    @Before
    public void doBeforeEachTestCase() {
        this.seed = new Integer[]{1,2,3,4,5,6,7,8};
    }
    
    @Test
    public void wholeArrayReverse() {
        ArrayReverser.reverse(seed);
        assertThat(seed[0], is(8));
    }
    
     @Test
     public void partialArrayReverse() {
        ArrayReverser.reverse(seed, 1, 5);
        assertThat(seed[1], is(5));
     }
    }
    

提交回复
热议问题