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

