Problem with Collections.binarySearch()

public class TaxPayerRecord implements Comparable <TaxPayerRecord>

{

private String nric;

private String name;

private String dateOfBirth;

private String gender;

private String blockNo;

private String unitNo;

private String streetName;

private String bldgName;

private String postalCode;

private long totalIncome;

private long totalDonation;

private long totalPersonalRelief;

/**

* Creates a new instance of TaxPayerRecord

*/

public TaxPayerRecord(String nric, String name, String dateOfBirth, String gender,

String blockNo, String unitNo, String streetName, String bldgName,

String postalCode, long totalIncome, long totalDonation,

long totalPersonalRelief)

{

this.nric = nric;

this.name = name;

this.dateOfBirth = dateOfBirth;

this.gender = gender;

this.blockNo = blockNo;

this.unitNo = unitNo;

this.streetName = streetName;

this.bldgName = bldgName;

this.postalCode = postalCode;

this.totalIncome = totalIncome;

this.totalDonation = totalDonation;

this.totalPersonalRelief = totalPersonalRelief;

}

public String toString()

{

return nric+"|"+name+"|"+dateOfBirth+"|"+gender+"|"+blockNo+"|"+unitNo+"|"+streetName+"|"+

bldgName+"|"+postalCode+"|"+totalIncome+"|"+totalDonation+"|"+

totalPersonalRelief;

}

public long getTotalIncome()

{

return totalIncome;

}

public long getTotalDonation()

{

return totalDonation;

}

public long getTotalPersonalRelief()

{

return totalPersonalRelief;

}

public String getDateOfBirth()

{

return dateOfBirth;

}

public String getPostalCode()

{

return postalCode;

}

public int compareTo (TaxPayerRecord next)

{

return this.nric.compareTo(next.nric);

}

} //TaxPayerRecord

import java.io.*;

import java.util.*;

public class TaxPayerProgramme

{

public TaxPayerProgramme()

{

String menu = "Options: \n"

+ "1. Compute And Print List Of Tax Payers (Sorted by NRIC) \n"

+ "2. Compute And Summary Of Tax Revenue \n"

+ "3. Search for Tax Payer by NRIC \n"

+ "Enter option(1-2,0 to quit): ";

System.out.print(menu);

Scanner input = new Scanner( System.in );

int choice = input.nextInt();

System.out.println("");

// Declaration

ArrayList<TaxPayerRecord> list = new ArrayList<TaxPayerRecord>();

String inFile ="TaxPayer2005.txt";

String line = "";

String nric;

String name;

String dateOfBirth;

String gender;

String blockNo;

String unitNo;

String streetName;

String bldgName;

String postalCode;

long totalIncome;

long totalDonation;

long totalPersonalRelief;

try{

//Read from file

FileReader fr = new FileReader (inFile);

BufferedReader inFile1= new BufferedReader (fr);

line=inFile1.readLine();

while (line!=null)

{

StringTokenizer tokenizer = new StringTokenizer(line,"|");

nric=tokenizer.nextToken();

name=tokenizer.nextToken();

dateOfBirth=tokenizer.nextToken();

gender=tokenizer.nextToken();

blockNo=tokenizer.nextToken();

unitNo=tokenizer.nextToken();

streetName=tokenizer.nextToken();

bldgName=tokenizer.nextToken();

postalCode=tokenizer.nextToken();

totalIncome=Long.parseLong(tokenizer.nextToken());

totalDonation=Long.parseLong(tokenizer.nextToken());

totalPersonalRelief=Long.parseLong(tokenizer.nextToken());

TaxPayerRecord person = new TaxPayerRecord(nric,name,dateOfBirth,gender,blockNo,unitNo,

streetName,bldgName,postalCode,totalIncome,

totalDonation,totalPersonalRelief);

list.add(person);

line=inFile1.readLine();

}//end while

inFile1.close();

}// end try

catch (Exception e)

{

e.printStackTrace();

}//end catch

do{

switch(choice)

{

case 0:

System.exit(0);

break;

case 1:

// run list

printList(list);

break;

case 2:

printSummary(list);

break;

case 3:

search(list,input);

break;

}//end switch

System.out.print(menu);

choice = input.nextInt();

System.out.println("");

}// end do

while(choice !=0);

Collections.sort(list);

}//end TaxPayerProgramme()

private void total(ArrayList<TaxPayerRecord> list)

{

// Declaration

double total=0;

// calculate total

for (int i=0; i<list.size(); i++)

total=+ tax(i,list);

//print msg

System.out.println("Total revenue collectable for year 2006 (S$): "+total+"\n");

}

private double tax(int i,ArrayList><TaxPayerRecord> list)

{

// Declaration

double income;

double tax;

// calculate income

income =list.get(i).getTotalIncome()-list.get(i).getTotalDonation()

-list.get(i).getTotalPersonalRelief();

// calculate tax

if (income>320000)

tax=(((income-320000)*0.21)+44850);

else if (income>160000)

tax=(((income-160000)*0.18)+16050);

else if (income>80000)

tax=(((income-80000)*0.145)+4450);

else if (income>40000)

tax=(((income-40000)*0.0875)+950);

else if (income>30000)

tax=(((income-30000)*0.0577)+375);

else

tax=((income-20000)*0.0577);

return tax;

}

private void totalAge(ArrayList<TaxPayerRecord> list)

{

// Declaration

String msg;

int i,age;

double grp1=0;

double grp2=0;

double grp3=0;

double grp4=0;

// calculate revenue by age

for (i=0; i<list.size(); i++)

{

age= 2006- Integer.parseInt(list.get(i).getDateOfBirth().substring(6,list.get(i).getDateOfBirth().length()));

if (age>55)

grp4 =+ tax(i,list);

else if (age>35)

grp3 =+ tax(i,list);

else if (age>17)

grp2 =+ tax(i,list);

else

grp1 =+ tax(i,list);

}

//print msg

msg="Total revenue by age range (S$) \n"+

"\t"+"(1 to 17)"+"\t"+ grp1 +"\n"+

"\t"+"(18 to 35)"+"\t"+ grp2 +"\n"+

"\t"+"(36 to 55)"+"\t"+ grp3 +"\n"+

"\t"+"(above 55)"+"\t"+ grp4 +"\n";

System.out.println(msg);

}

private void totalDistrict(ArrayList<TaxPayerRecord> list)

{

int count=1;

double temp=0;

double [][] array = new double [list.size()][2];

for (int i=0; i<list.size(); i++)

{

array[0]=Double.parseDouble(list.get(i).getPostalCode().substring(0,2));

array[1]=tax(i,list);

}

System.out.println("Total revenue by district (S$) ");

do{

for (int a=0; a><list.size(); a++)

{

if (count == array[a][0] )

temp=array[a][1];

}//end for loop

System.out.print("\t"+"(district "+count+")"+"\t"+ temp +"\n");

temp=0;

count++;

}while(count!= 80);// end of do_while loop

System.out.print("\n");

}

private void printList(ArrayList><TaxPayerRecord> list)

{

System.out.println("List of Tax Payers fpr Year 2006");

for (int i=0; i<list.size(); i++)

System.out.println((i+1)+") "+list.get(i)+"|"+tax(i,list)+"\n");

}

private void printSummary(ArrayList><TaxPayerRecord> list)

{

total(list);

totalAge(list);

totalDistrict(list);

}

private void search(ArrayList<TaxPayerRecord> list,Scanner input)

{

String nric;

int value;

System.out.print("Enter NRIC Number: ");

nric = input.next();

Collections.sort(list);

value = Collections.binarySearch(list,nric);

}

public static void main(String [] args)

{

new TaxPayerProgramme();

}

}

I keep getting this message:

C:\Documents and Settings\Xiong\Desktop\TaxPayerProgramme.java:285: cannot find symbol

symbol : method binarySearch(java.util.ArrayList<TaxPayerRecord>,java.lang.String)

location: class java.util.Collections

value = Collections.binarySearch(list,nric);

^

1 error

Tool completed with exit code 1

[8431 byte] By [Wongwxa] at [2007-11-27 10:34:49]
# 1

format your code with code tags

fastmikea at 2007-7-28 18:31:22 > top of Java-index,Java Essentials,Java Programming...
# 2

You can't search a list of TacPayerRecords using a String.

cotton.ma at 2007-7-28 18:31:22 > top of Java-index,Java Essentials,Java Programming...