1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Java:Nullpointer errors

Discussion in 'Java' started by cyrow, Sep 24, 2008.

  1. cyrow

    cyrow New Member

    Joined:
    Nov 19, 2007
    Messages:
    21
    Likes Received:
    0
    Trophy Points:
    0
    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)
     

Share This Page