Comp Sci Make an array with this series (java challenge)

Click For Summary
The discussion revolves around a Java coding challenge to create an array of size n*n with a specific pattern. The initial code produced an array filled with zeroes due to an incorrect calculation of the endpoint in the nested loop. After identifying that the endpoint should be adjusted to ensure the loop executes correctly, the user revised the code to fill the array from right to left. The conversation also highlights the importance of clear variable naming and the need for comments to clarify the algorithm's logic. Ultimately, the user successfully fixed the issue and provided a clearer understanding of the approach taken.
Arnoldjavs3
Messages
191
Reaction score
3

Homework Statement


Given n>=0, create an array length n*n with the following pattern, shown here for n=3 : {0, 0, 1, 0, 2, 1, 3, 2, 1} (spaces added to show the 3 groups).

Homework Equations

The Attempt at a Solution


Java:
public int[] squareUp(int n) {
  int length = n*n;
  int[] completeArry = new int[length];
 
  for(int subArray=1;subArray<n;subArray++) {
    int beginPoint = length- (n*(n-subArray)+1);
    int end = beginPoint+n-1;
    int elements = 1;
    for(int j=beginPoint;j>=end;j--) {
    
      if(elements<=subArray) {
        completeArry[j] = elements;
        elements++;
      }
    
    }
  
  }
  return completeArry;
}

Why is my array just full of zeroes? it doesn't even do anything. All it does it create an array full of zeroes with length n*n.

The idea is that there will be N sub arrays, so i initialize subArray to start at the first sub array.\

The beginning point of the array is where my second nested loop will start and then the endpoint is obviously where it ends. Elements represents the integer that it should add up to(which it will never go beyond the subarray value. So why isn't this algorithm doing anything?
 
Last edited:
Physics news on Phys.org
Turns out the line

Code:
end=beginPoint+n-1

should be - n, not + n.
 
Code:
for(int j=beginPoint;j>=end;j--)

If end>beginpoint, this loop will be executed 0 times.
 
Arnoldjavs3 said:

Homework Statement


Given n>=0, create an array length n*n with the following pattern, shown here for n=3 : {0, 0, 1, 0, 2, 1, 3, 2, 1} (spaces added to show the 3 groups).
It's not at all obvious to me how this pattern would look like for different values of n. Presumably that's not what your question was about.
Arnoldjavs3 said:

Homework Equations

The Attempt at a Solution


Java:
public int[] squareUp(int n) {
  int length = n*n;
  int[] completeArry = new int[length];
 
  for(int subArray=1;subArray<n;subArray++) {
    int beginPoint = length- (n*(n-subArray)+1);
    int end = beginPoint+n-1;
    int elements = 1;
    for(int j=beginPoint;j>=end;j--) {
  
      if(elements<=subArray) {
        completeArry[j] = elements;
        elements++;
      }  
    }
  }
  return completeArry;
}
It's very misleading to have a loop control variable named subArray. That name implies that it would be an array of some kind, not a loop control variable. For this purpose, i would do just fine.

Are you supposed to fill a two dimensional array? If that's the case, then thinking about subarrays makes sense. Here each subarray would be a row of the larger n x n matrix.
It would be helpful if you posted the complete problem description.
Arnoldjavs3 said:
Why is my array just full of zeroes? it doesn't even do anything. All it does it create an array full of zeroes with length n*n.

The idea is that there will be N sub arrays, so i initialize subArray to start at the first sub array.\

The beginning point of the array is where my second nested loop will start and then the endpoint is obviously where it ends. Elements represents the integer that it should add up to(which it will never go beyond the subarray value. So why isn't this algorithm doing anything?
 
willem2 said:
Code:
for(int j=beginPoint;j>=end;j--)

If end>beginpoint, this loop will be executed 0 times.

Mark44 said:
It's not at all obvious to me how this pattern would look like for different values of n. Presumably that's not what your question was about.
It's very misleading to have a loop control variable named subArray. That name implies that it would be an array of some kind.

Are you supposed to fill a two dimensional array? If that's the case, then thinking about subarrays makes sense. Here each subarray would be a row of the larger n x n matrix.
It would be helpful if you posted the complete problem description.

That actually is the full problem description. Here's the link for more examples:
http://codingbat.com/prob/p155405

I fixed the issue though. Like the quote above had stated, endpoint was greater than beginpoint so I had to fix that. The idea of 'subarray' was more or less just parts of the array divided equally for every N elements. Kinda like substring.

new code:
Java:
public int[] squareUp(int n) {
  int length = n*n;
  int[] completeArry = new int[length];
 
  for(int subArray=1;subArray<=n;subArray++) {
    int beginPoint = length- (n*(n-subArray)+1);
    int end = beginPoint-n+1;
    int elements = 1;
    for(int j=beginPoint;j>=end;j--) {
    
      if(elements<=subArray) {
        completeArry[j] = elements;
        elements++;
      }
  
    }
 
  }
  return completeArry;
}

I imagine from your perspective it's a lot harder to pick up on how my algorithm works here... But the idea is that it works from right to left starting at the end of the 'subarray' in the initial for loop.
 
Arnoldjavs3 said:
I imagine from your perspective it's a lot harder to pick up on how my algorithm works here... But the idea is that it works from right to left starting at the end of the 'subarray' in the initial for loop.
Which is exactly why we use comments. One that would be useful here is to explain that you algorithm fills the array from the end to the beginning. Another would be an explanation that the inner loop starts off where a previous iteration ended.
 

Similar threads

  • · Replies 18 ·
Replies
18
Views
2K
  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 21 ·
Replies
21
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 7 ·
Replies
7
Views
2K