Reversing a 2D array of objects; Java

61 Views Asked by At

I need to reverse the objects in a 2D Array

It starts with: {triangle, circle, square}, {star, pentagon, donut}

And should end with: {square, circle, triangle}, {donut, pentagon, star}

Currently it outputs: triangle, circle, square, star, pentagon, donut

I have looked at this question but even copying and pasting working code from that question doesn't work.

Here is the current code I have:

Shape[][] myShapes = {{triangle, circle, square}, {star, pentagon, donut}};

public static void reverseShapes(Shape[][] myShapes) {
    // TO DO #1: Implement your algorithm to reverse myShapes.
    for(int row = 0; row < myShapes.length; row++){
      
      for(int col = 0; col < myShapes[row].length / 2; col++) {
        Shape temp = myShapes[row][col];
        myShapes[row][col] = myShapes[row][myShapes[row].length - col - 1];
        myShapes[row][myShapes[row].length - col - 1] = temp;
      }
    }
    
  }//end of reverseShapes
1

There are 1 best solutions below

0
Idle_Mind On BEST ANSWER

This is how I'd write it:

  public static void reverseShapes(Shape[][] shapes) {
    for(Shape[] row : shapes) {
      for(int left=0, right=row.length-1; left<right; left++, right--) {
        Shape tmp = row[left];
        row[left] = row[right];
        row[right] = tmp;
      }
    }
  }

I think it's much easier to understand with the enhanced for loop syntax pulling a row out at a time, and then the indexed for loop using two different variables, "left" and "right" moving inwards from the ends towards the middle without needing to calculate any indices.