The question is to output the total salary and average salary of each rank, this is my code:
URL url=new URL("http://liveexample.pearsoncmg.com/data/Salary.txt");
Scanner input=new Scanner(url.openStream());
String[]FirstName=new String[1000];
String[]LastName=new String[1000];
String[]rank=new String[1000];
int[]salary=new int[1000];
int i=0;
int count=0;
double sum=0;
while(input.hasNext()) {
FirstName[i]=input.nextLine();
LastName[i]=input.nextLine();
rank[i]=input.nextLine();
salary[i]=input.nextInt();
if(rank[i]=="assistant") {
count++;
sum+=salary[i];
System.out.print("Total salary of assistant professors:"+sum+" average: "+sum/count);
}
else if(rank[i]=="associate") {
count++;
sum+=salary[i];
System.out.print("Total salary of associate professors:"+sum+" average: "+sum/count);
}
else if(rank[i]=="full") {
count++;
sum+=salary[i];
System.out.print("Total salary of full professors:"+sum+" average: "+sum/count);
}
else if(rank[i]=="faculty") {
count++;
sum+=salary[i];
System.out.print("Total salary of faculty professors:"+sum+" average: "+sum/count);
}
input.close();
}
however the output is InputMismatchException,and i checked my code many times, i can't find the error
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at HW11_09156136.HW11_09156136_01.main(HW11_09156136_01.java:24)
input.nextLine()
doesn't retrieve the next word in the stream, it retrieves the next line. Based on the url you provided in the program, your code is assigningFirstName1 LastName1 assistant 79174.73
toFirstName[i]
,FirstName2 LastName2 associate 70817.75
toLastName[i]
, etc. until it gets to the lineFirstName4 LastName4 full 116992.43
. From there it tries to parseFirstName4
as anint
, which of course fails. You need your program to usenext()
, which only gets text up to the next space, not newline, socould be replaced with something like
(Note that you need an extra
input.nextLine()
at the end, reasoning seen here)