Reputation: 27
It appears that java is not recognizing my array (split) when I try to use the ".length" property and I have no idea why. both statements are in the main method so there is no reason for it to not work. when I mouse over the errors in eclipse it says that the object "split" is undefined and asks me to create it despite the fact that it is already initialized.
Here is my code, the errors are at lines 41 and 42
errors:
List<Runner> allRunners = new ArrayList<Runner>();
while(i<split.length) {
allRunners.add(new Runner(split[i], split[i+1]));
}
full code:
import java.util.ArrayList;
import java.io.File;
import java.util.Scanner;
import java.io.IOException;
import java.util.Comparator;
import java.util.List;
public class RaceClient {
public static void main(String [] args) throws IOException {
Scanner inFile = new Scanner(new File("input.txt"));
int x = inFile.nextInt();
int i=0;
String[] times = new String[x];
while(i<times.length) {
times[i]= inFile.nextLine();
i++;
}//end of while
i=0;
while(i<times.length) {
String[]split = times[i].split(" ",2);
i++;
}//end of while
i=0;
List<Runner> allRunners = new ArrayList<Runner>();
while(i<split.length) {
allRunners.add(new Runner(split[i], split[i+1]));
}
//Fastest Over All Time
Runner fastestRunner=getMaxTime(allRunners);
System.out.println("FASTEST TIME");
System.out.println(
"Time: "+fastestRunner.getTime()+"\n"+
"Gender: "+fastestRunner.getGender()+
"\n"
);
//Fastest Female Time
Runner fastestFemaleRunner=getMaxTimeFemale(allRunners);
System.out.println("FASTEST FEMALE TIME");
if(fastestRunner.getGender().equalsIgnoreCase("F")){
System.out.println(
"Time: "+fastestFemaleRunner.getTime()+"\n"+
"Gender: "+fastestFemaleRunner.getGender()+
"\n"
);
}
else {
System.out.println(
"Time: "+fastestFemaleRunner.getTime()+"\n"+
"Gender: "+fastestFemaleRunner.getGender()+
"\n"
);
}
//Fastest Male Time
Runner fastestMaleRunner=getMaxTimeMale(allRunners);
if(fastestRunner.getGender().equalsIgnoreCase("M")){
System.out.println(
"Time: "+fastestMaleRunner.getTime()+"\n"+
"Gender: "+fastestMaleRunner.getGender()+
"\n"
);
}
else{
System.out.println("FASTEST MALE TIME");
System.out.println(
"Time: "+fastestMaleRunner.getTime()+"\n"+
"Gender: "+fastestMaleRunner.getGender()+
"\n"
);
}
}//end of main
static class Runner{
public double time;
public String gender;
public Runner(double time, String gender){
this.time=time;
this.gender=gender;
}
public Double getTime() {
return this.time;
}
public String getGender(){
return this.gender;
}
}
public static Runner getMaxTime(List<Runner> allRunners){
Runner max_runner=allRunners.stream()
.min(Comparator.comparingDouble(Runner::getTime))
.get();
return max_runner;
}
public static Runner getMaxTimeFemale(List<Runner> allRunners){
Runner maxFemaleRunner=allRunners.stream()
.filter(runner->runner.getGender().equalsIgnoreCase("F"))
.min(Comparator.comparingDouble(Runner::getTime))
.get();
return maxFemaleRunner;
}
public static Runner getMaxTimeMale(List<Runner> allRunners){
Runner maxMaleRunner=allRunners.stream()
.filter(runner->runner.getGender().equalsIgnoreCase("M="))
.min(Comparator.comparingDouble(Runner::getTime))
.get();
return maxMaleRunner;
}
}//end of class
Upvotes: 0
Views: 186
Reputation: 590
You have defined String[] split
inside a while
loop. So you cannot access split
array outside of from that loop. So change below code part:
i = 0;
while (i < times.length) {
String[] split = times[i].split(" ", 2);
i++;
}//end of while
i = 0;
List<Runner> allRunners = new ArrayList<Runner>();
while (i < split.length) {
allRunners.add(new Runner(split[i], split[i + 1]));
}
To:
i = 0;
List<Runner> allRunners = new ArrayList<Runner>();
while (i < times.length) {
String[] split = times[i].split(" ", 2);
int j = 0;
while (j < split.length - 1) {
allRunners.add(new Runner(Double.valueOf(split[j]), split[j + 1]));
j++;
}
i++;
}//end of while
Full code of main method:
public static void main(String[] args) throws IOException {
Scanner inFile = new Scanner(new File("input.txt"));
int x = inFile.nextInt();
int i = 0;
String[] times = new String[x];
while (i < times.length) {
times[i] = inFile.nextLine();
i++;
}//end of while
i = 0;
List<Runner> allRunners = new ArrayList<Runner>();
while (i < times.length) {
String[] split = times[i].split(" ", 2);
int j = 0;
while (j < split.length - 1) {
allRunners.add(new Runner(Double.valueOf(split[j]), split[j + 1]));
j++;
}
i++;
}//end of while
//Fastest Over All Time
Runner fastestRunner = getMaxTime(allRunners);
System.out.println("FASTEST TIME");
System.out.println(
"Time: " + fastestRunner.getTime() + "\n" +
"Gender: " + fastestRunner.getGender() +
"\n"
);
//Fastest Female Time
Runner fastestFemaleRunner = getMaxTimeFemale(allRunners);
System.out.println("FASTEST FEMALE TIME");
if (fastestRunner.getGender().equalsIgnoreCase("F")) {
System.out.println(
"Time: " + fastestFemaleRunner.getTime() + "\n" +
"Gender: " + fastestFemaleRunner.getGender() +
"\n"
);
} else {
System.out.println(
"Time: " + fastestFemaleRunner.getTime() + "\n" +
"Gender: " + fastestFemaleRunner.getGender() +
"\n"
);
}
//Fastest Male Time
Runner fastestMaleRunner = getMaxTimeMale(allRunners);
if (fastestRunner.getGender().equalsIgnoreCase("M")) {
System.out.println(
"Time: " + fastestMaleRunner.getTime() + "\n" +
"Gender: " + fastestMaleRunner.getGender() +
"\n"
);
} else {
System.out.println("FASTEST MALE TIME");
System.out.println(
"Time: " + fastestMaleRunner.getTime() + "\n" +
"Gender: " + fastestMaleRunner.getGender() +
"\n"
);
}
}//end of main
Upvotes: 0
Reputation: 1
String[] split;
i = 0;
while (i < times.length) {
split = times[i].split(" ", 2);
i++;
}//end of while
i = 0;
List<Runner> allRunners = new ArrayList<Runner>();
while (i < split.length) {
allRunners.add(new Runner(Double.parseDouble(split[i]), split[i + 1]));
}
There are two error's in this code,
new Runner
you need pass two params (double, String), but given two string params. Please check above updated code snippet :)
Upvotes: 0
Reputation: 530
You have defined the array inside while loop :
while(i<times.length) {
String[]split = times[i].split(" ",2);
i++;
}
Define it as :
String[] split = String[times.length];
while(i<times.length) {
split = times[i].split(" ",2);
i++;
}
Upvotes: 2