0

One of my school works tells us to make an 2D array, and display what is in the array. I don't know why it is saying out of bounds, and am kind of stuck. What we where tasked to do is to make, 10 student IDs and 3 tests with scores for each of them, as shown below in the first row of the Array. The for loop part was designed to move on to the next column after x reaches 3 (when the final test score is displayed).

public class TwoDArray {
public static void main(String [] args) {
    int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
    int y = 0;
    for (int x = 0; x < 4; x++) {
        System.out.print(musicScores[x][y] + "\t");
        for (x = 3;y < 10; y++) {
            x = 0;
            System.out.println("");
            }
        }
    }
}
3
  • please edit your question ! Commented Feb 23, 2021 at 18:46
  • Hint: What is the value of y after your nested for loop? Commented Feb 23, 2021 at 18:52
  • ah sorry, I found out what was going wrong and I fixed it so I won't need any more help Commented Feb 23, 2021 at 19:06

2 Answers 2

2

Your problem is that for the line:

System.out.print(musicScores[x][y] + "\t");

you are allowing y to take on a value of 10, which an invalid array index. The reason for this is that you are using y after you have exited the for loop:

for (y = 0;y < 10; y++) {
    ...
}

When this loop exits, y is 10. You then loop around and use y outside of that loop, which you probably shouldn't be doing. I'm not sure exactly what you're trying to do, but maybe you want to move the problematic line inside your inner for loop, like this:

class TwoDArray {
    public static void main(String [] args) {
        int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
        for (int x = 0; x < 4; x++) {
            for (int y = 0;y < 10; y++) {
                System.out.print(musicScores[x][y] + "\t");
            }
            System.out.println();
        }
    }
}

NOTE: Both my answer and the one supplied by @Dren clean up your code quite a bit. Setting x = 0 was doing you no good, and if you only use y inside the inner for loop, which you probably should be doing, then its best to define y in the for loop itself to make sure you don't use it outside the loop. All that your inner for loop is doing in your original code is printing a bunch of empty lines. I doubt that's what you intended. Neither of our solutions prints blank lines.

@Dren's answer does something quite noteworthy...it replaces hard-coded constants for array lengths with the actual lengths of the arrays in your dataset. This is always preferable. If you do this, then when you change your dataset, you don't have to make sure you change the hard coded length values to match...something that is quite error prone.

Sign up to request clarification or add additional context in comments.

1 Comment

love the explanation :)
1

You are mixing the logic in the for loop here is a way how to iterate in a 2D array

public class TwoDArray {
    public static void main(String[] args) {
        int[][] musicScores = {{1001, 2002, 3003, 4004, 5005, 6006, 7007, 8008, 9009, 1010,}, {10, 7, 8, 9, 5, 10, 8, 7, 6, 9}, {9, 8, 10, 9, 9, 10, 9, 9, 7, 9}, {8, 7, 8, 9, 8, 7, 8, 10, 8, 8}};
 
        for (int i = 0; i < musicScores.length; i++) {
            for (int j = 0; j < musicScores[i].length; j++) {
                System.out.println("Values at arr[" + i + "][" + j + "] is " + musicScores[i][j]);
            }
        }
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.