MOO C спортивная статистика упражнений - сколько раз строка появляется в файле? - PullRequest
0 голосов
/ 20 июня 2020

Вот я уже пару дней бьюсь об этом и не могу заставить его работать. Занимаюсь спортивной статистикой по МОО C Java курс. Я должен проверить, сколько игр сыграла команда (имя которой вводит пользователь).

В файле data.csv есть несколько строк, каждая из которых содержит имя 1, имя 2, точки 1 , баллы 2.

Итак, если пользователь вводит, например, «SJ», программа проверяет, сколько раз SJ упоминается в файле (ie. сколько игр сыграла эта команда) и увеличивает счет на 1 каждый раз, когда он упоминается.

Я также пытался сделать это, не создавая новый класс, однако результат все еще не тот, который я должен получить, так как я не могу использовать функцию «для каждого» , поэтому я всегда получаю count = 1, если появляется команда.

Есть ли решение для этого упражнения?

import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;
 
public class SportStatistics {
 
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        ArrayList<Game> games = new ArrayList<>();
        int count = 0;
        System.out.println("File: ");
        String file = scan.nextLine();
        try(Scanner scanner = new Scanner(Paths.get(file))){
            while(scanner.hasNextLine()){
                String line = scanner.nextLine();
                String[] parts = line.split(",");
                String team1 = parts[0];
                String team2 = parts[1];
                int result1 = Integer.valueOf(parts[2]);
                int result2 = Integer.valueOf(parts[3]);
                games.add(new Game(team1,team2,result1,result2));
            }
        }catch(Exception error){
            System.out.println("Error " + error.getMessage());
        }
        System.out.println("Team: ");
        String team = scan.nextLine();
    }
}
public class Game {
    private String team1;
    private String team2;
    private int points1;
    private int points2;
   
    public Game(String team1, String team2, int points1, int points2){
        this.team1=team1;
        this.team2=team2;
        this.points1=points1;
        this.points2=points2;
    }
   
    public String toString(){
        return this.team1 + ", " + this.team2 + ", "+ this.points1 + ", " + this.points2;
    }
}
ENCE,Vitality,9,16
ENCE,Vitality,16,12
ENCE,Vitality,9,16
ENCE,Heroic,10,16
SJ,ENCE,0,16
SJ,ENCE,3,16
FURIA,NRG,7,16
FURIA,Prospects,16,1

1 Ответ

0 голосов
/ 26 июня 2020

Надеюсь, я правильно понял.

Попробуйте прочитать файл после того, как пользователь введет название команды. Когда пользователь вводит «SJ», вы читаете файл. Получив имена команд в каждой строке, проверьте, совпадает ли team1 или team1 с введенным пользователем "SJ", и увеличьте значение переменной count.

Если вы хотите использовать a для каждого l oop, вы go с что-то вроде:

for (Game g : games) {
    if (g.team1.equals("SJ") || g.team2.equals("SJ")) {
        count++;
    }
}

Когда вы go первым способом, вам нужно читать файл .csv каждый раз, когда вы хотите посчитать команду.

Когда вы go Во-вторых, достаточно один раз прочитать .csv. Таким образом, у вас есть данные, и вы можете запросить название команды через некоторое время l oop и вызвать метод go через игры ArrayList

...