Make an array with this series (java challenge)

  • Context: Comp Sci 
  • Thread starter Thread starter Arnoldjavs3
  • Start date Start date
  • Tags Tags
    Array Challenge Series
Click For Summary

Discussion Overview

The discussion revolves around a Java programming challenge that requires participants to create an array of length n*n with a specific numerical pattern based on the input n. The conversation includes attempts at a solution, debugging issues, and clarifications about the problem statement.

Discussion Character

  • Homework-related
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant presents an initial attempt at a solution, noting that the resulting array is filled with zeroes and questioning why the algorithm does not function as intended.
  • Another participant suggests that a specific line of code should be corrected from adding n to subtracting n, indicating a potential source of error.
  • A participant points out that if the end variable is greater than the beginPoint, the inner loop will not execute, which could contribute to the issue of the array being filled with zeroes.
  • There is a discussion about the clarity of the variable names used in the code, particularly the term "subArray," which some participants find misleading.
  • One participant expresses confusion about how the pattern would look for different values of n and suggests that the problem description may not be complete.
  • Another participant provides a link to the full problem description for additional context and mentions that they fixed the issue with the endpoint variable.
  • A later reply emphasizes the importance of comments in the code to clarify the algorithm's functionality, particularly regarding the direction in which the array is filled.

Areas of Agreement / Disagreement

Participants express various viewpoints on the code's functionality and the clarity of the problem statement. There is no consensus on the best approach to the solution, and multiple competing views regarding variable naming and algorithm clarity remain present.

Contextual Notes

Some participants note that the problem description may lack clarity, and there are unresolved issues regarding the algorithm's logic and variable naming conventions. The discussion reflects uncertainty about the intended pattern for different values of n.

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 17 ·
Replies
17
Views
2K
  • · Replies 18 ·
Replies
18
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 21 ·
Replies
21
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 7 ·
Replies
7
Views
2K