1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Make an array with this series (java challenge)

  1. Apr 2, 2017 #1
    1. The problem statement, all variables and given/known data
    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).

    2. Relevant equations


    3. The attempt at a solution
    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;
    }

     
    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: Apr 2, 2017
  2. jcsd
  3. Apr 2, 2017 #2
    Turns out the line

    Code (Text):
    end=beginPoint+n-1
    should be - n, not + n.
     
  4. Apr 2, 2017 #3
    Code (Text):
    for(int j=beginPoint;j>=end;j--)
    If end>beginpoint, this loop will be executed 0 times.
     
  5. Apr 2, 2017 #4

    Mark44

    Staff: Mentor

    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, 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.
     
  6. Apr 2, 2017 #5
    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:
    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 alot 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.
     
  7. Apr 2, 2017 #6

    Mark44

    Staff: Mentor

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Make an array with this series (java challenge)
  1. Arrays in Java (Replies: 3)

Loading...