Java не распознает массив в основном методе - PullRequest
0 голосов
/ 03 марта 2020

Похоже, что java не распознает мой массив (split), когда я пытаюсь использовать свойство ".length", и я понятия не имею, почему. оба утверждения находятся в основном методе, поэтому нет никаких причин, чтобы он не работал. когда я нахожу курсор мыши на ошибки в eclipse, он говорит, что объект split не определен, и просит меня создать его, несмотря на тот факт, что он уже инициализирован.

Вот мой код, ошибки находятся в строках 41 и 42

ошибки:

List<Runner> allRunners = new ArrayList<Runner>();
while(i<split.length) {
allRunners.add(new Runner(split[i], split[i+1]));
}

полный код:


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

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Вы определили массив внутри, а l oop:

  while(i<times.length) {
  String[]split = times[i].split(" ",2);
  i++;
}

Определите его как:

 String[] split = String[times.length];
 while(i<times.length) {
 split = times[i].split(" ",2);
 i++;
  }
0 голосов
/ 03 марта 2020

Вы определили String[] split внутри while l oop. Таким образом, вы не можете получить доступ к массиву split вне этого l oop. Поэтому измените ниже часть кода:

    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]));
    }

Кому:

    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

Полный код основного метода:

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
0 голосов
/ 03 марта 2020
    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]));
    }

В этом коде есть две ошибки:

  1. split, которые необходимо объявить вне, пока l oop
  2. , в то время как l oop для new Runner вам нужно передать два параметра (double, String), но с учетом двух строковых параметров.

Пожалуйста, проверьте обновленный фрагмент кода:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...