Code: import java.text.DecimalFormat; public class Account{ //class Variables private static int NumAccounts = 0; private static final double Interest = 0.05; //Instant Variables private long accNum; private double balance; DecimalFormat x = new DecimalFormat("$00,000.00");//Format Balance public Account(long accN, double bal){//Constructor accNum = accN; balance = bal; NumAccounts++; } public int GetNumAccounts(){ return NumAccounts; } public double getBalance(){ return balance; } public long getAccountNum(){ return accNum; } public void debit(double amount){ if(balance >= amount){ balance -= amount; } } public void credit(double amount){ balance += amount; } public String toString(){ String Str; Str ="Account Number :" + accNum + "\n"+ "Account Balance :" + x.format(balance) + "\n"; return Str; } }//End of class Account import java.io.*; import java.util.*; public class TestAccountx{ private static final int Max = 1000; static Account[]accList= new Account[Max]; static Account u; public static Account getAccount(long accNum){//using binary search to find and return account if exist int lo = 0; int hi = accList.length-1; while(lo <= hi){ int mid = (lo + hi)/2; if(accList[mid].getAccountNum()== accNum){ //NULL POINTER EXCEPTION return accList[mid]; }else if( accList[mid].getAccountNum() < accNum ){ hi = mid - 1; }else{ lo = mid + 1; } }//end while return null; }//end getaccoutn; public static void insertIntoArray(Account p) { int numAccounts = p.GetNumAccounts(); accList[numAccounts - 1] = p; int lo = 0; int hi = numAccounts -1; for(int j = lo + 1; j <= hi; j++){ Account hold = accList[j]; int k = j - 1; while (k >= 0 && hold.getAccountNum()< accList[k].getAccountNum()){ accList[k + 1] = accList[k]; --k; }//End While accList[k + 1] = hold; }//End For } //End Insertion Sort public static void setNumAccounts(int numAccounts){//deincrement accounts numAccounts--; } public static void transaction(int accNum, double amount,int transType) { Account h = getAccount(accNum); // NULL POINTER EXCEPTION System.out.println("hhhhhhhhhhhhhhhhhh" + h); if(h!=null){ if (transType == 1){ accList[accNum].debit(amount); }else if (transType==2){ accList[accNum].credit(amount); }else{ System.out.println("Account does not exist"); } } }//end transaction public static void deleteAccount(long accNum){ int j=0; for(int i = 0; j < u.GetNumAccounts(); i++){ if(accList[j].getAccountNum()==u.getAccountNum()){ setNumAccounts( j ); break; } if(i == u.GetNumAccounts()){ System.out.println("Print error message"); } for(j = i; j < u.getAccountNum(); j++){ accList[j] = accList[j + 1]; } }//end for }//end function public static void main(String[] args){ Account a = new Account(123456,5255.17); insertIntoArray(a); Account b = new Account(455555,19218.20); insertIntoArray(b); Account c = new Account(217794,1002.62); insertIntoArray(c); Account d = new Account(998283,20203.75); insertIntoArray(d); //Create Transactions transaction(12345,1255.17,1); //NULL POINTER EXCEPTION transaction(188468,2781.80,2); transaction(217794,2000.00,1); //deleteAccount(998283); //deleteAccount(123457); transaction(998283,125.00,1); for(int i = 0; i < 4; i++){ System.out.println(accList[i].toString()); } }//end main }//end class TestAccount When I run my code, I am getting a nullpointer exception error at the points indicated. My suspicions are the getAccount(long accNum) method that I am using to return an Account is returning a null value. It appears to me that the while loop is finishing before it gets to smaller values such as 0,1,2,3. Please help me rectify this problem. Everything I have tried so far has failed. (urgent)