Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This is what I have so far in my prepending array. // IntArray.java public class

ID: 3815284 • Letter: T

Question

This is what I have so far in my prepending array.

// IntArray.java
public class IntArray {
// Int array representing the internal data.
private int[] a;
private int length;
// main function to verify.
public static void main(String args[]){
IntArray arr = new IntArray();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
arr.add(5);
arr.add(6);
arr.add(7);   
arr.add(8);
arr.add(9);
prepend(arr, 10);
for(int i=0;i<arr.length;i++){
System.out.println(arr.a[i]);
}}
private static void prepend(IntArray arr, int i) {
}
public IntArray() {
a = new int[9];
length = 0;
}
public int get(int i) {
if (i < 0 || i >= length) {
throw new ArrayIndexOutOfBoundsException(i);
}
return a[i];
}
public void set(int i, int value) {
if (i < 0 || i >= length) {
throw new ArrayIndexOutOfBoundsException(i);
}
a[i] = value;
}
public int size() {
return length;
}
public void add(int value) {
if (length >= a.length) {
int[] b = new int[a.length * 3];
int i;
for (i = 0; i < a.length; i++) {
b[i] = a[i];
}
b[i] = value;
a = b;
}
else{
a[length] = value;
}
length += 1;
}

public void prepend(int value){
if(length>=a.length){
int[] c = new int[a.length*3];
// add value to first index
c[0] = value;
// moving each element to new array by increasing it's index
for(int i=0;i<a.length;i++){
c[i+1] = a[i];
}
a = c;
}
else{
// increasing the index of each element.
for(int i=length;i>=0;i--){
a[i+1] = a[i];
}
// adding value to first index.
a[0] = value;
}
length += 1;
}
}

In a tester program, I get stopped at

System.out.println("OK. Now running a speed test prepending and adding a million values.");
           long start = System.currentTimeMillis();
           for (int i = 0; i < 1000000; i++) {
               a.prepend(-501 - i); ( Specifically this line )
           }
           for (int i = 0; i < a.size(); i++) {
               if (a.get(i) != -1000500 + i) {
                   throw new RuntimeException(
                           "Expected a.get(" + i + ") == " + (-1000500 + i) + " instead was " + a.get(i));
               }

           for (int i = 0; i < 1000000; i++) {
               a.add(521 + i);
           }
           if (a.size() != 2001021) {
               throw new RuntimeException("Size should now be 2001021, instead I got " + a.size());
           }
           for (int i = 0; i < a.size(); i++) {
               if (a.get(i) != -1000500 + i) {
                   throw new RuntimeException(
                           "Expected a.get(" + i + ") == " + (-1000500 + i) + " instead was " + a.get(i));
               }
           }

           for (int i = 0; i < a.size(); i++) {
               a.set(i, a.size() - i);
           }
           for (int i = 0; i < a.size(); i++) {
               if (a.get(i) != 2001021 - i) {
                   throw new RuntimeException("After resetting the whole array and calling a.get(i) I expected "
                           + (2001021 - i) + " but got " + a.get(i));
               }
           }
           long end = System.currentTimeMillis();

           if (end - start < 1000) {
               System.out.println("OK. You took " + (end - start) + " milliseconds, not bad!");
               System.out.println("****** Everything looks OK! ******");
               score += 10;
           } else {
               System.out.println("OK, but you took " + (end - start)
                       + " milliseconds, which seems too long (I'm expecting 1000 or less; my laptop takes between 61 and 100 in my implementations). Please let me know if you feel this is in error.");
           }
       } catch (Exception e) {
           e.printStackTrace(System.out);
       }

How do i fix my array program to run all the way through the tester program ? Please help ! Thanks in advance

Explanation / Answer

//there was just one bug in your prepend method you have put i=length but it should be length-1 because in your array

// array index starts from 0.

import java.util.Arrays;

public class IntArray {
   // Int array representing the internal data.
   private int[] a;
   private int length;
   // main function to verify.
   public static void main(String args[]){
       IntArray arr = new IntArray();
       arr.add(1);
       arr.add(2);
       arr.add(3);
       arr.add(4);
       arr.add(5);
       arr.add(6);
       arr.add(7);   
       arr.add(8);
       arr.add(9);
arr.prepend(10);

       for(int i=0;i<arr.length;i++){
           System.out.println(arr.a[i]);
       }}
  private static void prepend(IntArray arr, int i) {

//empty
}

   //constructor

   public IntArray() {
       a = new int[9];
       length = 0;
   }

  
   public int get(int i) {
       if (i < 0 || i >= length) {
           throw new ArrayIndexOutOfBoundsException(i);
       }
       return a[i];
   }
  
  
   public void set(int i, int value) {
       if (i < 0 || i >= length) {
           throw new ArrayIndexOutOfBoundsException(i);
       }
       a[i] = value;
   }
  
   public int size() {
       return length;
   }
  
   public void add(int value) {
       if (length >= a.length) {
           int[] b = new int[a.length * 3];
           int i;
           for (i = 0; i < a.length; i++) {
               b[i] = a[i];
           }
           b[i] = value;
           a = b;
       }
       else{
           a[length] = value;
       }
       length += 1;
   }
   public void prepend(int value){
       if(length>=a.length){
           int[] c = new int[a.length*3];
           // add value to first index
           c[0] = value;
           // moving each element to new array by increasing it's index
           for(int i=0;i<a.length;i++){
               c[i+1] = a[i];
           }
           a = c;

       }
       else{
           // increasing the index of each element.
           for(int i=length-1;i>=0;i--){// changed i=length-1
              
               a[i+1] = a[i];
           }
           // adding value to first index.
           a[0] = value;
       }
       length += 1;
   }
  
  
   public String toString()
   {
       return String.format(Arrays.toString(a));
      
   }
}

Note: in your tester you have i as the variable in multiple nested for loops . It will produce a compile time error

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote