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.73toFirstName[i],FirstName2 LastName2 associate 70817.75toLastName[i], etc. until it gets to the lineFirstName4 LastName4 full 116992.43. From there it tries to parseFirstName4as 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)